Left Join не возвращает все строки

У меня есть этот запрос в MySQL:

SELECT pr.*, pr7.value AS `room_price_high`
FROM `jos_hp_properties` pr
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id
WHERE pr7.field=23

Таблица jos_hp_properties имеет 27 строк, но запрос возвращает только один. Основываясь на этом вопросе, я думаю, что это может быть из-за предложения WHERE. Таблица jos_hp_properties2 имеет поля id, property, field, value, где field является внешним ключом к третьей таблице (из которой мне не нужно получать данные).

Есть ли способ выбрать все строки из первой таблицы, включая значение из таблицы №2, где поле равно 23 (или NULL, если нет поля 23)?

Ответ 1

Конечно. Переместите условие WHERE в JOIN:

SELECT pr.*, pr7.value AS `room_price_high`
  FROM `jos_hp_properties` pr
       LEFT JOIN `jos_hp_properties2` pr7 
       ON pr7.property=pr.id
   AND 
       pr7.field=23

Ответ 2

Вы должны поместить критерии pr7 в соединение, а не в предложение where. Предложение where работает во всем результирующем наборе ПОСЛЕ присоединения.

SELECT pr.*, pr7.value AS `room_price_high`
FROM `jos_hp_properties` pr
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id and pr7.field=23

Ответ 3

Попробуйте следующее:

SELECT pr.*, pr7.value AS `room_price_high`
FROM `jos_hp_properties` pr
LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id
WHERE (pr7.field=23 OR pr7.field is null)