2010-12-06 4 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); 

Это выберет все строки из таблицы1, table2, table3, которые имеют соответствующие строки. Если вам нужно выбрать все строки из table_one, а затем попытаться найти какие-то матчи в table_two через table_map, используйте:

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) 
Смежные вопросы