Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql :ne pas afficher le résultat en double sur SELECT

Malheureusement, vous devez effectuer les deux requêtes du haut deux fois pour les supprimer de la requête du bas :

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
   )