Необязательный оператор И в ГДЕ MySQL - PullRequest
3 голосов
/ 05 июня 2011

Я пытаюсь выяснить, как разрешить необязательные операторы AND, где есть LEFT OUTER JOIN, поскольку таблица является необязательной при просмотре записей. Тем не менее, у меня есть проблема, когда нет файлов, и в операторе WHERE, например:

SELECT rec.record_id,
       rec.record_name,
       f.file_name,
       f.file_id
FROM
(
    records rec

    LEFT OUTER JOIN files f ON f.record_id = rec.record_id
)
WHERE rec.record_id = 4928 
AND f.file_approved = 1      <-- this is what returns a zero results

Когда я удаляю AND f.file_approved = 1, он возвращает запись, но когда я ее оставляю, он не возвращает никакой записи.

Если запись не содержит файловых записей, она ничего не вернет. Мне нужно это проверить, и если файлов нет, он все равно сможет вернуть запись (без файлов).

Ответы [ 2 ]

5 голосов
/ 05 июня 2011

попробуйте переместить условие в оператор соединения, таким образом, оно будет объединяться только в строках, если они удовлетворяют условию

SELECT rec.record_id,
       rec.record_name,
       f.file_name,
       f.file_id
FROM
(
    records rec

    LEFT OUTER JOIN files f ON f.record_id = rec.record_id AND f.file_approved = 1
)
WHERE rec.record_id = 4928;
0 голосов
/ 05 июня 2011

Если вы не хотите форсировать условие, используйте вместо этого ИЛИ

WHERE 
  rec.record_id = 4928  
OR 
  f.file_approved = 1
...