比较两个表的服务,并仅显示未分配给用户1的那些服务
表1:服务
id | Service
--------------
1 | service 1
--------------
2 | service 2
--------------
3 | service 3
--------------
4 | service 4
--------------
5 | service 5
表2:分配的服务
id | services | assign_to | date
--------------------------------------
1 | service 1| 1 | 20/12/2019
--------------------------------------
2 | service 2| 1 | 20/12/2019
--------------------------------------
3 | service 1| 2 | 20/12/2019
--------------------------------------
3 | service 3| 1 | 20/12/2019
--------------------------------------
3 | service 2| 2 | 20/12/2019
我尝试左右加入喜欢
SELECT a.x, a.y
FROM table_a a LEFT JOIN table_b b
ON a.x = b.x AND a.y = b.y
WHERE b.x IS NULL;
最佳答案
通过在分配给用户1的服务上使用LEFT JOIN
并检查NULL
结果,可以找到未分配给用户1的服务(包括未分配给任何用户的服务):
SELECT s.id, s.service
FROM services s
LEFT JOIN assignments a ON a.services = s.service AND a.assign_to = 1
WHERE a.id IS NULL
输出:
id service
4 service 4
5 service 5
如果希望将所有已分配给任何用户或除1之外的用户的服务(即使它们也已分配给1),则可以使用以下查询:
SELECT s.id, s.service
FROM services s
LEFT JOIN assignments a ON a.services = s.service
GROUP BY s.id, s.service
HAVING SUM(a.assign_to != 1) > 0
OR SUM(a.assign_to) IS NULL
输出量
id service
1 service 1
2 service 2
4 service 4
5 service 5
Demo on dbfiddle