mysql - MySQL Left Join 4 个表,其中包含空重复行
问题描述
我遇到了一个查询,如果这很明显,我会从结果开始,然后提供更多细节。
用户关注关注供应商的赞助商,我正在尝试显示所有具有用户标识的产品,用于存在用户标识的赞助供应商产品,NULL 表示没有用户标识。
Desired result (userid = 1):
productid | supplierid | userid
1 1 1
2 1 1
3 2 Null
4 3 1
5 2 Null
6 3 1
Actual result (userid = 1):
productid | supplierid | userid
1 1 1
1 1 Null
2 1 1
2 1 Null
3 2 Null
4 3 1
4 3 Null
5 2 Null
6 3 1
6 3 Null
我的查询:
SELECT product.productid, product.supplierid, usersponsor.userid FROM product
INNER JOIN supplier ON product.supplierid = supplier.supplierid
LEFT JOIN sponsorsupplier ON sponsorsupplier.supplierid = product.supplierid
LEFT JOIN usersponsor ON usersponsor.sponsorid = sponsorsupplier.sponsorid and usersponsor.userid = 1
我有 4 张桌子
sponser
supplier
product
myuser
使用这两个链接表:
usersponsor
sponsorsupplier
示例表:
myuser:userid
1
2
3
4
5
Sponsor:sponsorid
1
2
3
Supplier:supplierid
1
2
3
usersponsor
userid | sponsorid
1 | 1 <- user 1 follows sponsor 1
2 | 2
2 | 3
sponsorsupplier
sponsorid | supplierid
1 | 1 <- supplys product 1,2 (sponsor 1)
1 | 3 <- supplys product 4,6 (sponsor 1)
2 | 2
2 | 1
3 | 3
Product
productid | supplierid
1 | 1 <-
2 | 1 <-
3 | 2
4 | 3 <-
5 | 2
6 | 3 <-
谢谢你的帮助。
解决方案
您可以聚合子查询:
SELECT
p.productid
, p.supplierid
, ss.userid
FROM Product p
LEFT JOIN (
SELECT
ss.supplierid
, MIN( us.userid ) userid
FROM sponsorsupplier ss
INNER JOIN usersponsor us ON ss.sponsorid = us.sponsorid
WHERE us.userid = 1
GROUP BY
ss.supplierid
) ss ON p.supplierid = ss.supplierid
ORDER BY
p.productid;
推荐阅读
- angularjs - $scope.$eval(stringFormula) 在 AngularJS 中抛出错误
- javascript - 始终可见汉堡包并隐藏汉堡包中的一些导航项目,一些应该在它旁边
- javascript - 我应该选择什么元素值才能单击元素
- uwp - azure Pipelines 上的 UWP App 的构建任务如何知道要使用的证书的名称?
- swift - Swift 将日期字符串转换为日期
- javascript - 为什么我的加载 gif 会使我的页面加载速度变慢?
- excel - VBA 函数用于从单个不动的单元格复制文本以粘贴到另一个单元格,每次粘贴/循环向下移动一个单元格
- amazon-web-services - 如何登录我已设置密码但无法登录的 ec2 实例。现在我怎样才能恢复那个实例?
- windows - 让程序打开文件的批处理命令
- php - 在没有 .php 扩展名的终端/Powershell 中运行 PHP 文件