mysql JOIN 问题

clipboard.png

在id 51 后的 数据 搜出来的factory 信息 是 NULL
能不能 改成 如果 company表的factory_id 是 NULL 的时候,
默认关联的的factory表的id是1,
这个不设置 factory_id 默认值,
有办法吗?

阅读 3k
5 个回答
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;

这样写估计是最简单的吧,只要改动left join后的On条件 改成ifnull(cp.factory_id,1)
最近忙着陪女票,好几周没来segmentfault答题了。

为什么不把factorys 作为左表呢

你left join ,关联字段是不是写错了.

用sql加默认值。。。

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

套一层判断是否为空就好了嘛
上面的兄弟只把结果里的factory_id为空改为1,不知道楼主是不是还要取出1关联到的factorys表id=1的字段数据,如果不需要的话就可能会出现factory_id为1时factorys两种数据的情况(关联到1的就有值,其他的就都是空值)

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;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题