如何为加入 table 设定条件

How to make a condition on join table

如果我有两个像这样的 table:

地点:

loc_id loc_name
  1     xx
  2     yy
  3     zz

组:

grp_id loc_id
  3      2

现在,如果我有组,我只想要相关位置,如果没有,我想要整个位置 table。

我是这样查询的:

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

,所以我一直都能得到所有的位置

试试这个:

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)

如果指定的 Group 有匹配的 Location 记录,则这些记录将由 UNION ALL 操作的第一个查询 return 编辑。在这种情况下,第二个查询将 return 一个空集。

如果有没有条匹配记录,那么第一个查询将return一个空集,而第二个查询将return [=21= table Location.

的所有 条记录