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