2010-04-24 11 views
1

En SQL, pouvons-nous toujours écrire une instruction de jointure interne en tant que requête principale et sous-requête?En SQL, pouvons-nous toujours écrire une instruction de jointure interne en tant que requête principale et sous-requête?

Par exemple,

select * from gifts g where g.giftID in (select giftID from sentGifts); 

peut faire une jointure et montrer les cadeaux envoyés dans la table sentGifts, mais il ne sera pas en mesure de montrer l'sentTime parce que c'est à l'intérieur de la sous-requête?

+3

Essayez de le faire lorsque vous rejoignez sur plusieurs colonnes, et votre moteur de base de données ne prend pas en charge la production de tuple. –

+0

en double: http://stackoverflow.com/questions/2676874/correlated-query-subquery-vs-join-query –

Répondre

4

Non, vous ne pouvez l'utiliser que si la condition est une valeur unique.

Vous ne pouvez pas faire une requête comme:

select * 
from gifts g 
inner join sentGifts s on s.giftType = g.giftType and s.giftDate = g.giftDate 
3

Non, vous ne pouvez pas réécrire tous les INNER JOIN comme ça. Parfois, votre condition de jointure interne implique plus d'une colonne et IN ne fonctionnera pas nécessairement.

De même, la condition de jointure interne peut parfois être une plage ou une expression plus complexe où cette technique de requête/sous-requête ne fonctionnera pas du tout, par exemple: trouver des intervalles de chevauchement.

Questions connexes