Sql查询,以获取同时具有多个值的列的行

  • 本文关键字:查询 获取 Sql sql join select
  • 更新时间 :
  • 英文 :


我有三个表:POSTPOST_ROLE,其中的哪一部分如下POSTROLE具有多对多关系,它们的联接表是POST_ROLE

如何获得同时具有不同角色的帖子?

例如,如何获得同时具有角色ROLE_USERROLE_ADMIN的帖子?

如下所示的查询不会返回任何内容,因为一行不能为一列有两个值:

SELECT
*
FROM
POST op
JOIN POST_ROLE opr ON
op.POST_ID = opr.POST_ID
JOIN ROLE or1 ON
opr.ROLE_ID = or1.ROLE_ID
WHERE
or1.CODE = 'ROLE_USER' AND or1.CODE = 'ROLE_ADMIN';

另一个使用IN运算符的查询,返回所有三个post行,因为IN操作在此处与OR操作符相同。

SELECT
*
FROM
POST op
JOIN POST_ROLE opr ON
op.POST_ID = opr.POST_ID
JOIN ROLE or1 ON
opr.ROLE_ID = or1.ROLE_ID
WHERE
or1.CODE IN ('ROLE_USER','ROLE_ADMIN');

查询的首选结果应该如下:

角色用户角色管理员
POST_IDTITLEROLE_IDCODE
1首席执行官100
1首席执行官101

解决方案是:

SELECT
*
FROM
POST p
WHERE
EXISTS (
SELECT
1
FROM
POST_ROLE pr
JOIN ROLE r ON
r.ROLE_ID = pr.ROLE_ID
WHERE
p.POST_ID = pr.POST_ID
AND r.CODE = 'ROLE_USER')
AND EXISTS (
SELECT
1
FROM
POST_ROLE pr
JOIN ROLE r ON
r.ROLE_ID = pr.ROLE_ID
WHERE
p.POST_ID = pr.POST_ID
AND r.CODE = 'ROLE_ADMIN');

最新更新