select cp.id,cp.name,cp.email,fs.id as factory_id,
fs.name as factorys_name,fs.email as factorys_email
from companys as cp
left join factorys as fs on ifnull(cp.factory_id,1)=fs.id;
select datas.cp_id, datas.cp_name, datas.f_id,
(
case when datas.f_id is null then 1
else datas.f_id end
) as factory_id, datas.f_name
from (
select cp.id as cp_id, cp.name as cp_name, f.id as f_id, f.name as f_name
from cp
left join factorys f
on cp.factory_id = f.id
) datas
select cp.*,fs.name,fs.email from (select id,name,email,case when factory_id is null then 1 else factory_id end factory_id from companys) cp left join factorys fs on cp.factory_id=fs.id;
这样写估计是最简单的吧,只要改动left join后的On条件 改成ifnull(cp.factory_id,1)
最近忙着陪女票,好几周没来segmentfault答题了。
为什么不把factorys 作为左表呢
你left join ,关联字段是不是写错了.
用sql加默认值。。。
套一层判断是否为空就好了嘛
上面的兄弟只把结果里的factory_id为空改为1,不知道楼主是不是还要取出1关联到的factorys表id=1的字段数据,如果不需要的话就可能会出现factory_id为1时factorys两种数据的情况(关联到1的就有值,其他的就都是空值)