2010-12-06 4 views
0

Dire que j'ai les tableaux suivants:SQL JOIN: comment faire?

================ 
table_one 
================ 
- table_one_id (PK) 
- field_1 
- field_2 


================ 
table_map 
================ 
- table_one_id 
- table_two_id 


================ 
table_two 
================ 
- table_two_id (PK) 
- field_1 
- field_2 

Compte tenu de la valeur table_two_id, j'ai besoin tous les enregistrements table_one joints aux colonnes table_two OÙ table_one-> table_one_id = table_map-> table_one_id, table_map-> table_two_id = table_two-> table_two_id.

Répondre

0
SELECT t1.field_1 as t1_field1, t2.field_1 as t2_field2 
FROM table_one t1, table_map m, table_two t2 
WHERE 
    m.table_two_id=123 
AND t1.table_one_id=m.table_one_id 
AND t2.table_two_id=m.table_two_id

Quelque chose comme ça vous donnera accès au premier champ dans les deux tableaux , étendez simplement à quels champs vous voulez

0

vous pouvez le faire avec sous requête comme

select * from table_one where table_one_id in 
    (select table_one_id from table_map where table_tow_id = my_value) 

ou 2 Assemble comme d'autres suggèrent

0
SELECT t1.* FROM table_one t1 
    JOIN table_map t2 ON t1.table_one_id = t2.table_one_id 
    WHERE t2.table_two_id = X 
0
SELECT * 
FROM table_one 
CROSS JOIN table_map USING(table_one_id) 
CROSS JOIN table_two USING(table_two_id); 

Cela sélectionnera toutes les lignes de table1, table2, table3 qui ont des lignes correspondantes. Si vous devez sélectionner toutes les lignes de Table_Un et puis essayer de trouver des matchs à Table_Deux par table_map, utilisez ceci:

SELECT * 
FROM table_one 
LEFT JOIN table_map USING(table_one_id) 
CROSS JOIN table_two USING(table_two_id); 

- toutes les lignes de Table_Un. Si aucune ligne correspondante n'est trouvée, vous obtiendrez des valeurs NULL dans les colonnes correspondantes.

USING signifie que la requête utilisera des colonnes avec des noms correspondant à:

USING(table_one_id) 

et équivaut à:

ON(table_one.table_one_id = table_map.table_one_id)