SQL JOIN: как это сделать? - PullRequest
0 голосов
/ 06 декабря 2010

Скажите, у меня есть следующие таблицы:

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

Ответы [ 4 ]

0 голосов
/ 06 декабря 2010
SELECT * 
FROM table_one 
CROSS JOIN table_map USING(table_one_id)
CROSS JOIN table_two USING(table_two_id);

Это выберет все строки из таблицы1, таблицы2, таблицы3, которые имеют совпадающие строки. Если вам нужно выбрать ВСЕ строки из 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)
0 голосов
/ 06 декабря 2010
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 голосов
/ 06 декабря 2010
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 голосов
/ 06 декабря 2010

вы можете сделать это с помощью подзапроса, как

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

или с 2-мя соединениями, как другие предлагают

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...