我在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
Run Code Online (Sandbox Code Playgroud)
该jos_hp_properties表有27行,但查询只返回一行.基于这个问题,我认为可能是因为WHERE子句.该jos_hp_properties2表具有字段id,属性,字段,值,其中field是第三个表的外键(我不需要从中获取数据).
有没有办法从第一个表中选择所有行,包括表#2中字段为23的值(如果没有字段23则为NULL)?
ber*_*nie 33
当然.将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
Run Code Online (Sandbox Code Playgroud)
您必须将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
Run Code Online (Sandbox Code Playgroud)