2010-04-24 15 views
1

Pourquoi le() obligatoire dans l'instruction SQLPourquoi le() obligatoire dans l'instruction SQL "select * from cadeaux INNER JOIN sentgifts en utilisant (giftID);"?

select * from gifts INNER JOIN sentgifts using (giftID); 

? Le() est habituellement pour spécifier le groupement de quelque chose. Mais dans ce cas, sommes-nous supposés pouvoir utiliser deux ou plusieurs noms de champs ...? Dans l'exemple ci-dessus, il peut être clair que c'est 1 champ, est-ce juste que l'analyseur n'est pas fait pour contourner le() quand tout est clair? (comme dans la langue Ruby).

Répondre

1

Oui, vous pouvez spécifier plusieurs colonnes à l'intérieur de la clause en utilisant comme ci-dessous.

using(col_1,col_2,col_3) 
1

Vous pouvez en fait spécifier une liste des colonnes , vérifiez here.

Et il est obligatoire parce que les exceptions de syntaxe soufflent l'analyseur et sont mauvais pour la performance.

Cela dit, on pourrait soutenir que UTILISATION lui-même est déjà juste sucre syntaxique, il est juste un raccourci de spécifier une jointure avec la normale sur syntaxe dans le cas où les noms de colonnes sont les mêmes pour les tables jointes.

Comme vous pouvez rejoindre ON plusieurs colonnes À L'AIDE fait exactement la même chose.

Les énoncés suivants sont doncéquivalent:

SELECT A.c1, A.c2, A.c3 FROM TABLE_A A 
JOIN TABLE_B B 
ON A.c1 = B.c1 
ON A.c2 = B.c2 
ON A.c3 = B.c3 

et

SELECT A.c1, A.c2, A.c3 FROM TABLE_A A 
JOIN TABLE_B B 
USING (c1,c2,c3)