[英]SQL finding records in multiple columns based on the records in another column
[英]SQL return records based on multiple columns values
假设我有以下数据:
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
我不想这样。
您可以使用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')
如果只想显示具有两个标签的数字,而记录的实际标签是标签之一,那么直接的解决方案是将等号和EXISTS
两次EXISTS
。
SELECT t1.number,
t1.tagvalue
FROM elbat t1
WHERE t1.tagvalue = 'MLB'
AND EXISTS (SELECT *
FROM elbat t2
WHERE t2.number = t1.number
AND t2.tagvalue = 'NFL')
OR t1.tagvalue = 'NFL'
AND EXISTS (SELECT *
FROM elbat t2
WHERE t2.number = t1.number
AND t2.tagvalue = 'MLB');
如果要返回同时具有两个代码的所有数字,则可以执行以下操作:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.