SQL为表中的每个组应用不同的where条件(filter)

时间:2017-07-26 15:53:42

标签: sql group-by where

我的数据库中有以下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

3 个答案:

答案 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)