MySQL : Don't show duplicate result on SELECT

标签 mysql sql

第三次选择显示结果与前两次选择重复的结果。 所以假设我的数据集只有 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/

相关文章:

sql - 插入包含前几行信息的新列

mysql - 如何对一个字段的 GROUP BY 和 LIMIT N 结果进行分组?

php - 我应该将 PDO 对象传递给每个对象,还是为每个对象创建一个新的 PDO 对象?

python - Django 中的原始 sql 到 json,带有 Datetime 和 Decimal MySql 列

mysql - 获取匹配的列名

java - Hibernate 结果按日期年/月分组

php - 如何在预订时屏蔽餐 table ?

mysql - 提取 Customer_Order 表中不存在的产品 ID

mysql - MERGE 语句的语法错误

mysql - 输入数据时出现 SQL 语法错误