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

10 réponses

1 2
Avatar
Ph. B.
Michel HERRSCHER a demandé:

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



En SQL ! ;-)

SELECT IDA FROM A
WHERE IDA NOT IN (SELECT IDA FROM B)

--
Philippe.
Avatar
Michel HERRSCHER
Dans un message Ph. B. disait :

Michel HERRSCHER a demandé:

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



En SQL ! ;-)

SELECT IDA FROM A
WHERE IDA NOT IN (SELECT IDA FROM B)




Merci bcp


j'avais oublié le NOT IN ....

je vais chercher en Windev ... et je vous tiens au courant

--
Michel HERRSCHER CONSULTANT
Président WINDASSO - Association des utilisateurs WxxDEV(c)
Tel : +33450870912 Fax:+33450871741
http://www.windasso.org
Avatar
sebNews
> >
> SELECT IDA FROM A
> WHERE IDA NOT IN (SELECT IDA FROM B)
Merci bcp



j'avais oublié le NOT IN ....

je vais chercher en Windev ... et je vous tiens au courant



Salut,

C'est vrai que ce qui est assez simple à faire en SQL semble plus difficile
avec l'éditeur de requête.
Il faut que je teste ce type de requête sous l'éditeur pour mes utilisateurs
( WDQE version utilisateur ) Tu peux nous tenir au courant si ce type
de requête est possible.

Sinon je reviens sous Paradox ... ( super QBE : mes utilisateurs ont eu un
choc en
passant sous WdQbe ( surout sur la 5.5 )

J'en profite pour vous demander à tous au passages : vous installez quoi
comme produit
QBE pour vos clients ? ( dans mon cas le QBE est indispensable )


Sébastien
Avatar
ManuPavy
sebNews a écrit :
SELECT IDA FROM A
WHERE IDA NOT IN (SELECT IDA FROM B)



Merci bcp




j'avais oublié le NOT IN ....

je vais chercher en Windev ... et je vous tiens au courant




Salut,

C'est vrai que ce qui est assez simple à faire en SQL semble plus difficile
avec l'éditeur de requête.
Il faut que je teste ce type de requête sous l'éditeur pour mes utilisateurs
( WDQE version utilisateur ) Tu peux nous tenir au courant si ce type
de requête est possible.



Au passage, si celà n'est pas pris sous WinDev, il y a une
correspondance de jointure en SQL pour le NOT IN + sous requete :

SELECT t1.a FROM t1 WHERE t1.id_t1 NOT IN ( SELECT t2.id_t1 FROM t2 )
est équivalent à :
SELECT t1.a FROM t1 LEFT OUTER JOIN t2 USING id_t1 WHERE t2.id_t1 IS NULL
ou bien (windev ne prend pas le USING je crois)
SELECT t1.a FROM t1 LEFT OUTER JOIN t2 ON t1.id_t1 = t2.id_t1 WHERE
t2.id_t1 IS NULL

--
Manu
Avatar
Michel HERRSCHER
Dans un message sebNews disait :

SELECT IDA FROM A
WHERE IDA NOT IN (SELECT IDA FROM B)


Merci bcp



j'avais oublié le NOT IN ....

je vais chercher en Windev ... et je vous tiens au courant



Salut,

C'est vrai que ce qui est assez simple à faire en SQL semble plus
difficile avec l'éditeur de requête.
Il faut que je teste ce type de requête sous l'éditeur pour mes
utilisateurs ( WDQE version utilisateur ) Tu peux nous tenir au
courant si ce type
de requête est possible.



la retro analyse ne la prend pas. mais on peut l'utiliser comme une requete
normale en introduisant le code SQL.

--
Michel HERRSCHER CONSULTANT
Président WINDASSO - Association des utilisateurs WxxDEV(c)
Tel : +33450870912 Fax:+33450871741
http://www.windasso.org
Avatar
sebNews
> la retro analyse ne la prend pas. mais on peut l'utiliser comme une


requete
normale en introduisant le code SQL.



Pour un utilisateur Lamba c'est plus que délicat.

Sébastien
Avatar
Manu
> En SQL ! ;-)

SELECT IDA FROM A
WHERE IDA NOT IN (SELECT IDA FROM B)



sinon :

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

en left outer join je ne sais pas trop.
Avatar
sf.marseille
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 ?

AB+ Laurent
Avatar
Manu
"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.

AB+ Laurent




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
1 2