如何在连接表上创建条件

时间:2016-04-06 13:01:20

标签: sql informix

如果我有两张这样的表:

位置:

loc_id loc_name
  1     xx
  2     yy
  3     zz

群组:

grp_id loc_id
  3      2

现在,如果我在那里的小组,我只想要相关的位置,如果不是我想要整个位置表。

我这样查询:

select distinct a.loc_id , a.loc_name 
from Location  a LEFT join Group b
on a.loc_id = b.loc_id 
where  (b.grp_id = 3 OR (b.group_id IS NULL))

但是我总是得到所有的位置,因为我使用ORing

1 个答案:

答案 0 :(得分:3)

试试这个:

SELECT loc_id, loc_name
FROM Location l
WHERE EXISTS (SELECT * 
              FROM Group g
              WHERE l.loc_id = g.loc_id AND
                    g.grp_id = 3)

UNION ALL

SELECT loc_id, loc_name
FROM Location 
WHERE NOT EXISTS (SELECT *
                  FROM Location l
                  JOIN GROUP g ON l.loc_id = g.loc_id
                  WHERE g.grp_id = 3)

如果指定的Location存在匹配的Group条记录,则UNION ALL操作的第一个查询将返回这些记录。在这种情况下,第二个查询将返回一个空集。

如果没有匹配记录,则第一个查询将返回一个空集,而第二个查询将返回表Location所有记录。