基于多列值的SQL返回记录

时间:2018-08-24 15:08:29

标签: sql filter

假设我有以下数据:

Number  TagValue
1       MLB
1       NFL
2       MLB
2       NFL
3       MLS
3       NFL
4       NFL

我想返回以下内容:

Number  TagValue
1       MLB
1       NFL
2       MLB
2       NFL

请求是查看每个数字标签值组合,并查看其是否同时具有MLB和NFL。如果没有,我不想退还。一个简单的where子句将返回:

Number  TagValue
1       MLB
1       NFL
2       MLB
2       NFL
3       NFL
4       NFL

我不想要这个。

3 个答案:

答案 0 :(得分:1)

您可以使用exists

select t.*
from table t
where exists (select 1 from table t1 where t1.number = t.number and t1.tagvalue = 'MLB') and
      exists (select 1 from table t1 where t1.number = t.number and t1.tagvalue = 'NFL')

答案 1 :(得分:1)

如果您只想显示具有两个标签且数字的实际标签是标签之一的记录,那么简单的解决方案是将等号运算和{{{1 }}。

EXISTS

答案 2 :(得分:0)

如果要返回同时具有两个代码的所有数字,则可以执行以下操作:

select number
from t
where tagvalue in ('MLB', 'NFL')
group by number
having min(tagvalue) <> max(tagvalue);

在这种情况下,我发现返回多行的实用性很小。

如果您只需要一个团队的人数,则:

select number, max(tagvalue)
from t
where tagvalue in ('MLB', 'NFL')
group by number
having min(tagvalue) = max(tagvalue);