sql >> Databasteknik >  >> RDS >> Mysql

Returnera överordnade poster med underordnade poster som motsvarar specifika värden OCH där den totala uppsättningen av underordnade poster för en given förälder är lika med ett specifikt värde

Frågan som du bad om den är:

SELECT  parent.item1, parent.item2, parent.index
FROM    parent
INNER JOIN
        child
ON      child.index = parent.index
GROUP BY
        parent.item1, parent.item2, parent.index
HAVING  SUM(CASE WHEN child.value IN (1111111, 2222222) THEN 1 ELSE 0 END) = 2
        AND COUNT(*) <= 2

Om du bara vill säkerställa att barn matchar alla värden i IN listan och ingen som inte finns i listan, använd detta (i SQL Server )

SELECT  *
FROM    parent p
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    (
                SELECT  value
                FROM    child c
                WHERE   c.index = p.index
                ) c
        FULL JOIN
                (
                SELECT  11111111 AS value
                UNION ALL
                SELECT  22222222
                ) q
        ON      c.value = q.value
        WHERE   c.value IS NULL OR q.value IS NULL
        )



  1. Varför lägger Oracle till en dold kolumn här?

  2. säkert ange "order by"-klausul från användarinmatning i python / postgresql / psycopg2

  3. CONNECT BY eller hierarkiska frågor i andra RDBMS än Oracle

  4. SKAPA SPRÅK plpython3u – PostgreSQL 9.6