2013-05-23 1 views
0

donc j'ai 2 tables avec les données suivantesNatural SQL JOIN et utiliser la clause

*where a star is a primary key. 
*and a # is a unique key. 

Tableau 1

╔══════╦═══════╦════════╗ 
║ #nlm ║ data2 ║ *data3 ║ 
╚══════╩═══════╩════════╝ 

Tableau 2

╔══════╦═════╗ 
║ *pid ║ nlm ║ 
╚══════╩═════╝ 

L'objectif est pour obtenir des données2 quand je sais pid. J'ai essayé ceci, et ai échoué mal.

SELECT data2 FROM table1 LEFT JOIN table2 USING nlm WHERE pid = 3; 
+0

Recevez-vous des messages d'erreur ou des résultats inattendus? –

+0

message d'erreur à propos de ma syntaxe – user2414932

Répondre

0

jointure naturelle relie deux tables en utilisant les noms de colonnes communes, et il utilise la clause using. Les autres jointures utilisent la clause on.

Essayez ceci:

SELECT table1.data2 
FROM table1 LEFT JOIN 
    table2 
    on table1.nlm = table2.`#nlm` 
WHERE table2.pid = 3; 
+0

'#' ne fait pas partie du nom de la colonne, c'est juste sa façon de marquer une clé unique dans la description du schéma. Bien que les types de clés sont totalement hors de propos pour la question. – Barmar

0

La clause USING exige que les noms de colonnes soient entre parenthèses:

SELECT data2 FROM table1 
INNER JOIN table2 USING (nlm) 
WHERE pid = 3 

Cela devrait également être un INNER JOIN, puisque la clause WHERE exige qu'il trouve un rangée dans table2.