Esta es probablemente una simple declaración SQL, pero en este momento tengo un "congelamiento del cerebro".

Tengo esta mesa

variant_id | filter_id
1585593211       4
1585593211       48
1585593212       4
1585593212       49

Necesito obtener variant_id que tenga filter_id: 4 y 48. En este caso, espero obtener 1585593211

sql
1
Kovi 10 sep. 2018 a las 03:06

3 respuestas

La mejor respuesta

Puede usar IN para obtener todas las filas con filter_id 4 o 48. Luego GROUP BY variant_id y compruebe que el recuento de filter_id s distintos es igual a 2 en una cláusula HAVING.

SELECT variant_id
       FROM elbat
       WHERE filter_id IN (4, 48)
       GROUP BY variant_id
       HAVING count(DISTINCT filter_id) = 2;
3
sticky bit 10 sep. 2018 a las 00:15

Esta es una consulta "sets-dentro-conjuntos"

Puede intentar obtener count base en la condición, luego encontrar el variant_id recuento igual 2

Esquema (MySQL v5.6)

CREATE TABLE T(
   variant_id INT,
   filter_id INT
);


INSERT INTO T VALUES (1585593211,4);
INSERT INTO T VALUES (1585593211,48);
INSERT INTO T VALUES (1585593212,4);
INSERT INTO T VALUES (1585593212,49);

Consulta # 1

SELECT variant_id
FROM T t1
where filter_id in (4,48)
group by variant_id
HAVING COUNT(*) = 2;

| variant_id |
| ---------- |
| 1585593211 |

Ver en DB Fiddle

O

select variant_id
from T
group by variant_id
having sum(filter_id = 4) > 0 and 
       sum(filter_id = 48) > 0     
2
D-Shih 10 sep. 2018 a las 00:17
SELECT variant_id
FROM TABLENAME where filter_id in (4,48) group by variant_id having count(distinct filter_id)>1;

Agrupar por, donde filter_id filtraría todos los datos que tienen 4 y 48 para una ID de variante específica. pero los requisitos reales se cumplirían cuando agreguemos
having count(distinct filter_id)>1;
esto aseguraría que ambos 4 y 48 estarían allí en filter_id.

-1
10 sep. 2018 a las 06:10