Mysql выбрать несколько таблиц, но внутреннее соединение на одной таблице - PullRequest
1 голос
/ 28 января 2012

Можно ли выбрать несколько таблиц и выполнить внутреннее соединение для одной из этих таблиц? например,

SELECT * 
FROM table1 AS t1, table2 AS t2, table3 AS t3
INNER JOIN table4 AS t4 ON t1.row3 = t4.row3
INNER JOIN table5 AS t5 ON t1.row4 = t5.row4
WHERE ...

Этот частный случай вызывает у меня проблему. это дает мне ошибку - Неизвестный столбец "t1.row3" в 'on clause'. Я не знаю, возможно ли выбрать несколько таблиц, но сделайте внутреннее соединение для одной из этих таблиц.

1 Ответ

7 голосов
/ 28 января 2012

Операнд JOIN имеет более высокий приоритет, чем операнд запятой ,, поэтому объединение эффективно обрабатывается как

t1, t2, (t3, t4, t5 ON ... )

Поставьте скобки вокруг t1, t2, t3.

SELECT * 
FROM  ( table1 AS t1, table2 AS t2, table3 AS t3 )
INNER JOIN table4 AS t4 ON t1.row3 = t4.row3
INNER JOIN table5 AS t5 ON t1.row4 = t5.row4
WHERE ...

Вы также можете написать свой запрос как:

SELECT * 
FROM  table1 AS t1
INNER JOIN table2 AS t2
INNER JOIN table3 AS t3
INNER JOIN table4 AS t4 ON t1.row3 = t4.row3
INNER JOIN table5 AS t5 ON t1.row4 = t5.row4
WHERE ...

потому что запятая эквивалентна INNER JOIN без условия соединения.

...