首页 > 解决方案 > Mysql join 不显示所有记录

问题描述

我正在使用带有连接的 Php,我有两个表(“services”和“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'

标签: mysqlsqljoin

解决方案


将 where 子句移到ANDinON子句:

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';

简而言之,当有一个 where 子句包括 table of Left Jointhen 上的过滤器时,它的行为就像INNER JOINnot LEFT JOIN


推荐阅读