todas seleccionar menos las excluir excepto ejemplos dato columnas campo sql-server select relational-division

sql server - seleccionar - MSSQL Select con "vertical", donde



select todas las columnas sql (3)

SELECT DISTINCT a.PRODUCTID FROM mytable AS a INNER JOIN mytable AS b ON a.PRODUCTID=b.PRODUCTID WHERE a.TAGID=59 AND b.TAGID=61 ;

Realmente no sé cómo explicar, excepto con "vertical donde".

Imagina la siguiente tabla:

TAGID|PRODUCTID|SHOP_ID 59 |3418-7 |38 61 |3418-7 |38 60 |4227-4 |38 61 |4227-4 |38

Ahora quiero devolver todos los ID de productos, que tienen relación con los identificadores de etiqueta: 59,61. En otras palabras, los valores de ID de producto donde existen filas para ambos identificadores de etiqueta.

Así que quiero regresar 3418-7, pero no 4227-4

¿Cómo escribo esto tan simple como sea posible en una declaración de SQL?

Esta es la declaración de trabajo que tengo hasta ahora, pero creo que esto podría hacerse de una manera mucho más inteligente:

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


SELECT PRODUCTID FROM T WHERE TAGID IN (59,61) GROUP BY PRODUCTID HAVING COUNT(DISTINCT TAGID) = 2

O

SELECT PRODUCTID FROM T WHERE TAGID = 59 INTERSECT SELECT PRODUCTID FROM T WHERE TAGID = 61


SELECT ProductId FROM shop_tag_relations WHERE TAGID IN (59,61) GROUP BY ProductId HAVING COUNT(DISTINCT TagId) = 2