MSSQL选择"垂直" - 其中

Esb*_*ben 2 sql-server select relational-division

除了"垂直在哪里",我真的不知道如何解释.

想象一下下表:

TAGID|PRODUCTID|SHOP_ID
59   |3418-7   |38
61   |3418-7   |38
60   |4227-4   |38
61   |4227-4   |38
Run Code Online (Sandbox Code Playgroud)

现在我想返回与标签ID有关的所有产品ID:59,61.换句话说,两个标签ID 存在行的产品ID的值.

所以我想返回3418-7,但不是4227-4

如何在SQL语句中尽可能简单地编写它?

这是我到目前为止的工作声明,但我觉得这可以用更聪明的方式完成:

SELECT 
  productid 
FROM shop_tag_relations 
WHERE 
  productid IN (select productid from shop_tag_relations WHERE tagid=59) 
AND 
  productid IN (select productid from shop_tag_relations WHERE tagid=61)
GROUP BY productid,shop_id
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 8

SELECT PRODUCTID
FROM T
WHERE TAGID IN (59,61)
GROUP BY PRODUCTID
HAVING COUNT(DISTINCT TAGID) = 2
Run Code Online (Sandbox Code Playgroud)

要么

SELECT PRODUCTID
FROM T
WHERE TAGID = 59
INTERSECT
SELECT PRODUCTID
FROM T
WHERE TAGID = 61
Run Code Online (Sandbox Code Playgroud)