Bonjour,
j'ai un peu de mal avec les jointures
c'est pas faute de lire des tutos
j'ai 2 tables liées du style "client<=>facture"
comment sélectionner tous les clients qui n'ont pas de facture ?
Bonjour,
j'ai un peu de mal avec les jointures
c'est pas faute de lire des tutos
j'ai 2 tables liées du style "client<=>facture"
comment sélectionner tous les clients qui n'ont pas de facture ?
salut,
as tu une ébauche de ta requete?
je te conseille de regarder du coté des jointures externes
bon courage
je pense avoir trouvé mais je suis pas sur
si quelqu'un pouvez m'expliquer ce que fait SQL quand il traite cette requete...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT * from client C LEFT OUTER JOIN factures F ON T.codeclient=F.codeclient WHERE F.codeclient IS NULL
salut,
alors avec ceci :
tu as une jointure externe gauche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT * FROM client C LEFT OUTER JOIN factures F ON C.codeclient=F.codeclient
donc pour chaque client, tu va avoir la facture correspondante, ou NULL s'il n'y a pas de facture
tu sélectionnes juste les clients qui n'ont pas de factures
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE F.codeclient IS NULL
Je joins la liste des clients aux factures qui leurs correspondent
, en affichant tous les clients, même s'il n'y a pas de facture (LEFT OUTER JOIN).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 FROM client C JOIN factures F ON T.codeclient=F.codeclient
Je ne conserve que les lignes pour lesquelles il n'y a pas de facture correspondante
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE F.codeclient IS NULL
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous,
N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton
et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
La solution est beaucoup plus compréhensible sous cette forme :
Qui se lit ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT * FROM client WHERE codeclient IN (SELECT codeclient FROM client EXCEPT SELECT codeclient FROM factures)
extraire toutes les informations des clients dont l'identifiant n'est pas dans la table FACTURES....
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Salut !
Peux-tu également (succintement) nous parler des différences de performance entre les deux méthodes ?
Merci !
dans le même genre et plus simple
je mettrais plutôt:
qui fait exactement ce que tu explique, de manière plus intuitive je pense et qui parait plus rapide d'execution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT * FROM client WHERE codeclient NOT IN (SELECT codeclient FROM factures)
en espérant que çà aide, bonne chance.
A+
Partager