我在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行,但查询只返回一行。基于 this question ,我认为可能是因为WHERE子句。 jos_hp_properties2
表包含字段id,property,field,value,其中field
是第三个表的外键(我不需要从中获取数据)。
有没有办法从第一个表中选择所有行,包括表#2中字段为23的值(如果没有字段23,则为NULL)?
答案 0 :(得分: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
答案 1 :(得分:6)
您必须将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
答案 2 :(得分:0)
试试这个:
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)
答案 3 :(得分:0)
还可以使用CTE(公用表表达式)进行选择,然后使用CTE进行左联接。
wrc (parentid, childid) as (
select parentid, childid
from placechild
where relationshipid in (select id from placerelationship where relationship = 'Winter Region Capital')
),
stw (cnid, coid, capid, st_or_te, sid, scid,wcid) as (
select s.cnid, s.coid, s.capid, s.st_or_te, s.sid, s.scid, w.childid
from stcap s
left join wrc w
on s.sid = w.parentid
)
select * from stw