我的数据库中有以下SQL表:
index, group, foo
1 A 2
2 A 2
3 A 0
4 A 1
5 B 2
6 B 1
7 C 1
还有更多的组,我需要根据此过滤表B编写查询。对于表A中的每个组,它的索引应该等于或大于表B中同一组的index_egt。
如果表B中未列出该组,则不会过滤该组。
index_egt, group
3 A
5 B
预期结果:
index, group, foo
3 A 0
4 A 1
5 B 2
6 B 1
7 C 1
答案 0 :(得分:1)
试试这个,A.index> = B.index_egt将处理在TableB中列出该组的情况,而B.index_egt IS NULL将处理未列出该组的情况:
SELECT
A.index,
A.group,
A.foo
FROM TableA AS A
LEFT JOIN TableB AS B ON A.group=B.group
WHERE A.index>=B.index_egt
OR B.index_egt IS NULL
答案 1 :(得分:1)
select
a.*
from
A a
left join
B b ON b.group = a.group
where
a.index >= b.index_egt OR b.index_egt IS NULL
答案 2 :(得分:1)
我总是喜欢合并的这个技巧
SELECT a.*
FROM a_table_with_no_name a
LEFT JOIN b_table_with_no_name b ON b.group = a.group
WHERE a.index >= COALESCE(b.index_egt,a.index)