OVH Cloud OVH Cloud

Pour les pro du SQL et de Windev 9

12 réponses
Avatar
Michel HERRSCHER
Bonsoir,

J'ai deux tables :

A contient les produits ( clé unique IDA )
B contient les couleurs possibles pour chacun des produits ( clé unique IDB,
clé multiple IDA )

Je recherche tous les produits A qui n'ont aucune couleur affectée, CAD pas
de ligne dans la table B

1) comment formuler dans l'éditeur de requête ou

2) en SQL direct


Merci de votre support
--
Michel HERRSCHER CONSULTANT
Président WINDASSO - Association des utilisateurs WxxDEV(c)
Tel : +33450870912 Fax:+33450871741
http://www.windasso.org

2 réponses

1 2
Avatar
ManuPavy
Manu a écrit :
"sf.marseille" wrote in message
news:42cb943c$0$29941$

Salut,


SELECT IDA FROM A
WHERE NOT EXISTS (SELECT 1 FROM B where A.IDA = b.IDA)

sinon sous oracle avec jointure

SELECT A.IDA
FROM A, B
WHERE A.IDA = B.IDA (+)
AND B.IDA IS NULL



Je n'ai pas osé proposer ces syntaxes là. Sinon, sont elles standards



?

la première oui
la deuxième non elle est spécifique Oracle mais celle en "left outer join"
je en la connais pas :-( bien qu'elle soit standard.



Oracle v9 a implanté les JOIN (12 ans apres les spec SQL92). Et c'est ce
qui est à préférer.

apparemment (je ne connais pas trop oracle) :
WHERE A.IDA = B.IDA <=> INNER JOIN A.IDA = B.IDA

WHERE A.IDA = B.IDA (+) <=> LEFT OUTER JOIN A.IDA = B.IDA
<=> WHERE A.IDA = B.IDA OR B.IDA IS NULL

WHERE A.IDA (+) = B.IDA <=> RIGHT OUTER JOIN A.IDA = B.IDA
<=> WHERE A.IDA = B.IDA OR A.IDA IS NULL


--
Manu
Avatar
ManuPavy
ERE A.IDA = B.IDA <=> INNER JOIN A.IDA = B.IDA

WHERE A.IDA = B.IDA (+) <=> LEFT OUTER JOIN A.IDA = B.IDA
<=> WHERE A.IDA = B.IDA OR B.IDA IS NULL

WHERE A.IDA (+) = B.IDA <=> RIGHT OUTER JOIN A.IDA = B.IDA
<=> WHERE A.IDA = B.IDA OR A.IDA IS NULL



Apres reflexion, je pense me gourrer sur les dernieres equivalences

--
Manu
1 2