3 таблицы sql join - PullRequest
       0

3 таблицы sql join

0 голосов
/ 20 июня 2011

Мне нужно объединить tableA, tableB и tableC, но возможно, что tableB не будет иметь соответствующей строки. Ниже написано, как я сейчас делаю запрос. Проблема в том, что если tableB не имеет соответствующей строки, он не вернет результат. Мои навыки sql очень ржавые, поэтому я ценю вашу помощь. Спасибо.

SELECT [column names]
FROM tableA AS a, tableB AS b, tableC as c
WHERE b.blah = a.blah
AND c.foo = a.foo
AND [more where conditions]

Ответы [ 4 ]

4 голосов
/ 20 июня 2011

Не используйте синтаксис ,.Используйте JOIN, чтобы разрешить чтение LEFT JOIN ...

SELECT
  *
FROM
  tableA
LEFT JOIN
  tableB
    ON TableB.x = TableA.y
LEFT JOIN
  tableC
    ON TableC.x = TableB.y
    AND TableC.y = TableA.z
2 голосов
/ 20 июня 2011

Используйте LEFT JOIN.

SELECT [column names]
FROM 
    tableA AS a 
    LEFT JOIN tableB AS b ON b.blah = a.blah
    JOIN tableC as c ON c.foo = a.foo
0 голосов
/ 20 июня 2011

Терминология здесь (чтобы вы могли посмотреть больше деталей) - это Внешнее Соединение.Другие ответы хороши, но следите за тем, хотите ли вы объединить INNER или OUTER в таблице c (хотите ли вы возвращать записи, если в tableC нет совпадающих строк)?Вот ссылка для общего выпуска.

http://www.w3schools.com/sql/sql_join_left.asp

0 голосов
/ 20 июня 2011
SELECT [column names]
FROM tableA AS a INNER JOIN tableC as c ON (c.foo = a.foo)
LEFT OUTER JOIN tableB as B on (b.blah = a.blah)
WHERE [more where conditions]

Если [больше, где условия] находятся на B, то вам необходимо включить их в предложение OUTER JOIN ON.

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