WHERE EXISTS (SQL) - SQL/NoSQL - Programmation
Marsh Posté le 03-03-2016 à 20:49:10
SI tu as un doute, utilise le nom complet
Code :
|
Au passage, c'est assez déguelasse comme requête : tu retournes toutes les lignes de A , à condiion que V ait au moins une ligne > 2
Mais j'imagine qu' c'est juste un exemple
Marsh Posté le 03-03-2016 à 22:51:52
Merci Flo mais je ne suis pas sûr de bien comprendre...
Car du coup y a aucune jointure entre la table A et la table B.
Cela fonctionne tout de même? Le "matching" se fait entre la colonne A de la table B et la colonne A de la table A ?
Moi j'aurais ajouté la jointure "a.colonne A = b.colonne" mais si je comprends ce que tu me dis, ce n'est pas nécessaire?
Code :
|
Marsh Posté le 03-03-2016 à 22:59:08
a ben non, si tu veux qu'il y aune jointure, faut lui dire. Tu peux décrire ce que tu veux en français ?
Tu utilise quel sql : mysql (mouais) ? sql server (bof) ? oracle (beurk)? postgresql (bien)?
Marsh Posté le 03-03-2016 à 23:01:31
Alors je t'explique le contexte.
C'est un "examen" sur papier.
Il y a des formules SQL et je dois dire si c'est bon ou mauvais.
Et la requête qui est proposée est
Code :
|
Alors déjà je trouve bizarre que la tabvle A soit associée à un alias alors qu'il ne sert à rien.
Ensuite je trouve bizarre la colonne B liée à deux tables différentes.
Si on ne fait pas la jointure ça marche tout de même?
Le requêteur va juste regarder les valeurs de la colonneB (table B) sans se soucier du matching avec la table A?
EDIT : bon, je crois que j'ai compris. La sous requête n'est pas obligée d'avoir un rapport...C'est juste une condition pour savoir si la requête ramène quelque chose...
En gros : Select * from TABLE A where exist (select * from table B where colonne A >2) ça veut dire que si dans la table B, il y a au moins une ligne dans la colonne A > 2, alors la requête sortira quelque chose.
Ca ne veut pas dire que y aura un matching entre la table A et la table B.
J'ai bon?
Marsh Posté le 03-03-2016 à 23:09:29
J'en profite pour une autre question sur le SQL.
http://sql.sh/cours/case
CASE
WHEN
WHEN
ELSE
END
C'est toujours la structure? Le ELSE est indispensable?
On ne peut pas faire un
CASE
WHEN
WHEN
WHEN
END
?
Exemple :
Code :
|
Merci !
Marsh Posté le 04-03-2016 à 08:07:23
1/ c est ca. Si tu veux tu peux ajouter des conditions genre where a.colonneb >b.colonneb
2/ pas obligatoire
Marsh Posté le 03-03-2016 à 19:07:08
Bonjour,
Je me permets de vous solliciter afin de m'aider à comprendre la fonction "where exists" en SQL.
Dans ma compréhension des choses, il est indispensable de faire une jointure.
Mais...un ami m'a mis le doute.
Est-ce que quelque chose comme ça, ça peut passer?
Select Colonne A, Colonne B
from TABLE A
where exists (select * from TABLE B where Colonne A > 2)
;
Sachant que la colonne A des deux tables a le même nom et le même genre de données.
Merci de votre aide !