2016-05-17 5 views
0
----------  ----------  ---------- 
| TBL_1 |  | TBL_2 |  | TBL_3 | 
----------  ----------  ---------- 
| id  |  | id  |  |TBL_1_id| 
| foo |  | bar |  |TBL_2_id| 
----------  ----------  ---------- 

I, kinda, имеет этот конкретный набор таблиц в MySQL. TBL_3 представляет собой составную таблицу привязки строк в TBL_1 и TBL_2 вместе. Я хочу выводить содержимое TBL_1 и TBL_2, запрашивая TBL_3, но я не могу понять концепцию JOIN s.
Исходя из того, что я читал, это должно быть примерно так:MySQL Composite Table JOIN QUERY

SELECT * FROM tbl_3
RIGHT JOIN (tbl_1, tbl_2) ON (tbl_1.id = tbl_3.tbl_1_id, tbl_2.id = tbl_3.tbl_2_id)
WHERE tbl_3.id = 'some_id';

Я ничего не получаю. также, когда я настраиваю этот запрос, иногда строки возвращаются, но никогда не отображаются IDK. почему это?

** Вышеупомянутый запрос, то же самое, что и этот?

SELECT * FROM tbl_3
RIGHT JOIN tbl_1 ПО tbl_1.id = tbl_3.tbl_1_id
RIGHT JOIN tbl_2 ПО tbl_2.id = tbl_3.tbl_1_id
ГДЕ tbl_3.id = 'some_id';

** EDIT: в интерпретации запроса выше ж/множественное соединение, является покинул стол, на которые ссылаются 2 RIGHT JOIN возвращаемые таблиц, является продуктом 1 RIGHT JOIN?

+1

Что вы желаемый результат? –

+0

i wanna output tbl_1.'foo' и tbl_2.'bar' ... – Valkyrurr

+0

Вы хотите вывести tbl_1.foo независимо от того, существует ли соответствующий tbl_2.bar при использовании tbl_3? Если это так, вы должны использовать внешние соединения. Если нет, используйте equijoin (обычное «соединение») с tbl_3, tbl_1 и tbl_2. В случае внутренних объединений вам нужно использовать tbl_3 в качестве таблицы фактов. В случае, когда значения tbl_2 не могут быть указаны, вам нужно будет подключиться к tbl_1 external к tbl_3 и tbl_2. –

ответ

0

Следующий запрос в одиночку линии, что вы могли бы использовать, чтобы показать информацию из TBL_1 и TBL_2 для всех id пар, которые появляются в таблице моста TBL_3:

SELECT t1.foo, t2.bar 
FROM TBL_1 t1 
INNER JOIN TBL_3 t3 
    ON t1.id = t3.TBL_1_id 
INNER JOIN TBL_2 t2 
    ON t2.id = t3.TBL_2_id 
0
SELECT t1.foo, t2.bar 
FROM TBL_1 t1 
left join TBL_3 t3 
    ON t1.id = t3.TBL_1_id 
left JOIN TBL_2 t2 
    ON t2.id = t3.TBL_2_id;