mysql - 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'
解决方案
将 where 子句移到AND
inON
子句:
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 Join
then 上的过滤器时,它的行为就像INNER JOIN
not LEFT JOIN
。
推荐阅读
- c - 为什么 malloc 在长 argv 参数后会产生错误?
- python-3.x - Numpy - 你如何规范化数据集中的特定特征?
- python - 如何循环一行代码,直到用户输入正确答案?
- tkinter - 退出 Tkinter 时,将 Tkinter 列表框中的多个选择分配给可调用变量和“应用程序未响应”
- svg - SVG 的 SMIL 是否已弃用、未弃用或...已暂停但最终将被弃用?
- python - 如何将国外网页(如gem5官方文档)下载到本地?
- python - 按行将输入划分为不同的列表
- php - 检查变量是否为空时如何在PHP中使用SWITCH语句?
- c - C:在断开的串行 USB 设备上读取功能不返回错误
- go - 来自动态参数的 Hugo 数据文件