2010-12-06 84 views
0

說我有如下表:SQL JOIN:怎麼辦?

================ 
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 

給定的值table_two_id,我需要在table_one所有記錄在table_two加入與列WHERE table_one-> table_one_id = table_map-> table_one_id,table_map-> table_two_id = table_two-> table_two_id。

回答

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

類似的東西會給你訪問的第一個字段在兩個表中,只是擴展到你想要的領域

0

你可以用子查詢做到像

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

或2加入像其他建議

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); 

這將從table1,table2,table3中選擇具有匹配行的所有行。 如果您需要選擇從table_one所有行,然後試圖通過table_map找到table_two一些比賽,用這個:

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

- 所有行table_one。當找不到匹配的行時 - 您將在相應的列中獲得NULL。

USING意味着查詢將使用列名稱相符:

USING(table_one_id) 

,等同於:

ON(table_one.table_one_id = table_map.table_one_id)