php - mysql JOIN 问题
阿神
阿神 2017-04-11 10:32:03
[PHP讨论组]

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

阿神
阿神

闭关修行中......

全部回复(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 作为左表呢

PHP中文网

你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;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号