Ответ 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
У меня есть этот запрос в 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)?
Конечно. Переместите условие 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)