如何为加入 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
.
的所有 条记录
如果我有两个像这样的 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
.