MySQL присоединяется к записи, которая может не существовать - PullRequest
3 голосов
/ 25 октября 2010

Я пытаюсь выполнить запрос, который выглядит примерно так:

SELECT <columns> FROM table1 
INNER JOIN table2 ON table1.id = table2.table1_id
INNER JOIN table3 ON table1.id = table3.table1_id
WHERE table3.column1 != 'foo' AND <other_conditions>
LIMIT 1;

Дело в том - я хочу, чтобы запрос возвращал результат независимо от того, существует запись в table3 илине.То есть - если запись в table3 присутствует, я хочу проверить, имеет ли эта запись определенное значение столбца.Если запись в table3 не существует, я хочу, чтобы запрос предполагал, что условие ИСТИНА.

Есть указатели?

Ответы [ 3 ]

6 голосов
/ 25 октября 2010

Вы используете левое соединение на столе.Если соответствующей записи не существует, значение из таблицы будет нулевым, поэтому вы можете использовать coalesce для получения значения, которое вы можете сравнить со строкой:

SELECT <columns> FROM table1 
INNER JOIN table2 ON table1.id = table2.table1_id
LEFT JOIN table3 ON table1.id = table3.table1_id
WHERE COALESCE(table3.column1, '') != 'foo' AND <other_conditions>
LIMIT 1
3 голосов
/ 25 октября 2010

Вы пришли к тому, что заметили разницу между условиями WHERE и условиями JOIN.

SELECT 
  <columns> 
FROM
  table1 
  INNER JOIN table2 ON table2.table1_id = table1.id
  LEFT  JOIN table3 ON table3.table1_id = table1.id AND table3.column1 <> 'foo' 
WHERE
  <other_conditions>
LIMIT 1;
0 голосов
/ 25 октября 2010

Вам нужно использовать внешнее соединение, чтобы включить table3 вместо внутреннего соединения.

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