У меня есть этот запрос в 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
таблица имеет полевой идентификатор, свойство, поле, значение, где field
внешний ключ к третьей таблице (который я не должен получать данные из).
Существует ли способ выбрать все строки из первой таблицы, включая значение от таблицы № 2, где поле равняется 23 (или ПУСТОЙ УКАЗАТЕЛЬ, если нет никакого поля 23)?
Конечно. Переместите условие 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
Вы должны поместить критерий 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
Попробуйте следующее:
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)