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)
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)