来自具有多个组的表的SQL值

时间:2017-03-16 18:07:18

标签: sql sql-server

我有一个表,其中有多个人链接到多个组。

我有一个程序需要从75588组中带来所有人但是如果这个人如果在2443组中它不能携带。 我正在尝试这样的事情。

SELECT * FROM BRZGRUDB08.BrinksPortal.dbo.tuxg_usuario_grupo WHERE UXG_N_USU_N_CODIGO = 302826
AND ((UXG_N_GRP_N_CODIGO <> 2443) AND (UXG_N_GRP_N_CODIGO = 75588))

例: 人A在一个组中,组75588 人B在两组中,组75588和2443

在仅限选择的人A中必须返回。

但它不起作用,它带来了所有价值。

2 个答案:

答案 0 :(得分:1)

将以下示例中的person_id替换为标识各个人的列。

使用not exists()

select *
from BRZGRUDB08.BrinksPortal.dbo.tuxg_usuario_grupo as o
where UXG_N_USU_N_CODIGO = 302826
  and UXG_N_GRP_N_CODIGO = 75588
  and not exists (
    select 1
    from BRZGRUDB08.BrinksPortal.dbo.tuxg_usuario_grupo as i
    where i.person_id = o.person_id
      and i.UXG_N_GRP_N_CODIGO = 2443
    )

答案 1 :(得分:0)

进行以下更改:

  • 使用NOT EXISTS停止2443的记录选择。
  • 使用像主要字段这样的唯一字段来映射人员和组表之间的引用。

您的查询应该是这样的:

SELECT * FROM BRZGRUDB08.BrinksPortal.dbo.tuxg_usuario_grupo AS A
WHERE A.UXG_N_GRP_N_CODIGO = 75588 AND A.UXG_N_USU_N_CODIGO = 302826
AND NOT EXISTS (
SELECT 0 FROM BRZGRUDB08.BrinksPortal.dbo.tuxg_usuario_grupo AS B
WHERE B.UXG_N_GRP_N_CODIGO = 2443 AND B.PID = A.PID
)