簡體   English   中英

基於多列值的SQL返回記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM