Sql-Server
選擇具有相同第一列值和不同第二列值的記錄?SQL 伺服器
假設我們有一個 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 相同的記錄
ContentId
。TagId
在我的範例中結果如下
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
這個如何:
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