繁体   English   中英

Mysql 加入未显示所有记录

[英]Mysql join not showing all records

我正在使用带有连接的 Php,我有两个表(“服务”和“service_detail”),我想获取所有服务,但想知道供应商选择或未选择的服务

这是我的服务表结构

id          service_name        image
1           Abc                 abc.jpg
2           xyz                 xyz.jpg
3           OPS                 ops.jpg
4           tys                 tys.jpg
5           byp                 byp.jpg

这是我的 services_detail 表 strcutre

id          vendor_id       service_id      price
1           101             1               50
2           101             2               70
3           101             3               80
4           101             4               30
5           102             1               70
6           102             2               40
...

我尝试使用以下查询但仅显示选定的服务,但我想获取所有带有参数的服务(已选择或未选择)我错在哪里? 这是我的查询

SELECT sd.vendor_id, sd.service_id, sd.price, s.service_name, s.image
FROM services_detail sd
LEFT JOIN services s
ON sd.service_id = s.id
WHERE sd.vendor_id = '101'

将您的 where 子句移动到ON子句中的AND

AND sd.vendor_id = '101'

并在连接中交换表以获取所有服务

SELECT sd.vendor_id, sd.service_id, sd.price, s.service_name, s.image, 
IF (sd.vendor_id is not null, 'Opted', 'Not opted') as status
FROM services s
LEFT JOIN services_detail sd
ON sd.service_id = s.id AND sd.vendor_id = '101';

简而言之,当Left Join表上有一个包含过滤器的 where 子句时,它的行为就像INNER JOIN而不是LEFT JOIN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM