Необязательно И в инструкции WHERE MySQL

#mysql #left-join

#mysql — сервер #соединение по левому краю #mysql

Вопрос:

Я пытаюсь выяснить, как разрешить необязательные 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 , это возвращает запись, но когда я оставляю ее, она не возвращает никакой записи.

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

Ответ №1:

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

 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;
  

Ответ №2:

Если вы не хотите принудительно выполнять условие, используйте вместо этого OR

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

Комментарии:

1. Это вернет все записи с f.file_approved = 1 , но оно должно возвращать только записи с совпадением record_id .