Sql-Server

選擇具有相同第一列值和不同第二列值的記錄?SQL 伺服器

  • February 14, 2019

假設我們有一個 SQL Server 表,如下所示:

ContentId |  TagId
--------------------
1               2
1               3
2               1
2               2
2               3
1002            1
1002            1003
1003            4
1003            1002
1004            1
1005            2002
1006            1
1006            1003
1007            1
1007            1003
1008            2
1008            3

我們如何選擇與 1, 1003 相同的記錄ContentIdTagId

我的範例中結果如下

ContentId |  TagId
----------------------
1002            1
1002            1003
1006            1
1006            1003
1007            1
1007            1003

或者

ContentId 
----------
1002                        
1006                        
1007                    

您可以使用 intersect 來獲取匹配的記錄

SELECT ContentId 
FROM dbo.Content
WHERE TagId = 1003
INTERSECT
SELECT ContentId 
FROM dbo.Content
WHERE TagId = 1;

結果

ContentId
1002
1006
1007

DbFiddle

這個如何:

SELECT ct.ContentId
FROM
(
   SELECT * 
   FROM ContentTag AS ct
   WHERE ct.TagId IN (1, 1003)
) AS ct
GROUP BY ct.ContentId
HAVING COUNT(1) >= 2

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=32ccec55bec5b93a21c534a0a7fbf53f

引用自:https://dba.stackexchange.com/questions/229748