Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/02/2011, 08h57   #1
Candidat au titre de Membre du Club
 
Ingénieur développement logiciels
Inscription : novembre 2006
Messages : 113
Détails du profil
Informations personnelles :
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2006
Messages : 113
Points : 13
Points : 13
Par défaut Résolution requête SQL Help!

Salut à tous,

Je bloque totalement sur la résolution d'une requête de niveau 1 sur le site
sql-ex-ru, pourtant j'arrive à résoudre celles de niveau 3
Alors je ne sais pas peut être bien que je suis vraiment à la ramasse...
Voici l'énoncé:

on a 4 tables

Classes(class, type, country, numGuns, bore, displacement)
Ships(name, class, launched)
Battles(name, date)
Outcomes(ship, battle, result)

L'énoncé:

For each country, determine battles in which the ships of the given country did not participate.
Result set: country, battle

Voici le result query attendu
country name
Germany Guadalcanal
Germany North Cape
Germany Surigao Strait
Germany #Cuba62a
Germany #Cuba62b
Gt.Britain Guadalcanal
Gt.Britain North Atlantic
Gt.Britain North Cape
Gt.Britain Surigao Strait
Gt.Britain #Cuba62a
Gt.Britain #Cuba62b
Japan North Atlantic
Japan North Cape
Japan Surigao Strait
Japan #Cuba62a
Japan #Cuba62b
USA North Atlantic
USA North Cape
USA #Cuba62a
USA #Cuba62b

Comme on peut le voir on affiche toutes les batailles pour lesquelles aucun navire n'a participé et on affiche son pays("country"), que l'on récupère à partir de la table "classes".
A noter que dans le jeu de données, il n'y a pas forcément de "classes" associé à un ship(navire).
Pour ma part, j'ai réussi à afficher(et encore) une partie du resultset,c'est-à-dire la colonne "country", mais je n'arrive pas à gérer la colonne "battle". Donc forcément pour l'instant dans ma colonne "battle" j'ai que des "NULL".

THX
mnemonic78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 10h07   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Le niveau 1 est supérieur au niveau 3 non ?
Parce que ce n'est pas une requête très facile !

Donne nous ta requête.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h40   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
Utilisez le NOT EXISTS !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2011, 10h09   #4
Candidat au titre de Membre du Club
 
Ingénieur développement logiciels
Inscription : novembre 2006
Messages : 113
Détails du profil
Informations personnelles :
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2006
Messages : 113
Points : 13
Points : 13
Bon je suis toujours bloqué, mais j'ai décomposé le problème:
J'ai commencé par afficher les ships(avec leury country respectives) qui n'ont pas participé à toutes les batailles


Code :
1
2
3
4
5
6
7
8
SELECT c.country
FROM classes c LEFT JOIN ships s 
ON c.class=s.class
LEFT JOIN outcomes o
ON s.name=o.ship
WHERE NOT EXISTS(
SELECT ship FROM outcomes ou
WHERE ou.battle=o.battle)
Maintenant il me faut les batailles pour chaque country, mais je ne vois pas comment le faire.
mnemonic78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h58.


 
 
 
 
Partenaires

Hébergement Web