第三次选择显示结果与前两次选择重复的结果。 所以假设我的数据集只有 5 个 ID。 前两个语句产生 ids 1,2,3 enabled = 1 最后一条语句我需要 ids 4,5 enabled = 0
但现在我正在启用 ids 1,2,3,4,5 = 1 PLUS ids 1,2,3,4,5 enabled = 0
SELECT p.*, 1 as enabled
FROM member_permissions mp
JOIN permissions p ON p.permission_id = mp.permission_id
WHERE member_id = 1
UNION
SELECT pgp.*, 1 as enabled
FROM member_permissions mp
JOIN permission_link pl ON pl.permission_group_id = mp.permission_group_id
JOIN permissions pgp ON pgp.permission_id = pl.permission_id
WHERE member_id = 1
UNION
SELECT *, 0 as enabled
FROM permissions p
最佳答案
不幸的是,您必须对两个顶级查询执行两次才能将它们从较低的查询中删除:
SELECT p.*, 1 as enabled
FROM member_permissions mp
JOIN permissions p ON p.permission_id = mp.permission_id
WHERE member_id = 1
UNION
SELECT pgp.*, 1 as enabled
FROM member_permissions mp
JOIN permission_link pl ON pl.permission_group_id = mp.permission_group_id
JOIN permissions pgp ON pgp.permission_id = pl.permission_id
WHERE member_id = 1
UNION
SELECT *, 0 as enabled
FROM permissions p where p.permission_id not in (
SELECT p.permission_id
FROM member_permissions mp
JOIN permissions p ON p.permission_id = mp.permission_id
WHERE member_id = 1
UNION ALL
SELECT pgp.permission_id
FROM member_permissions mp
JOIN permission_link pl ON pl.permission_group_id = mp.permission_group_id
JOIN permissions pgp ON pgp.permission_id = pl.permission_id
WHERE member_id = 1
)
关于MySQL : Don't show duplicate result on SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39824218/