Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Geben Sie übergeordnete Datensätze mit untergeordneten Datensätzen zurück, die bestimmten Werten entsprechen UND wobei der Gesamtsatz untergeordneter Datensätze für einen bestimmten übergeordneten Datensatz einem bestimmten Wert entspricht

Die von Ihnen angeforderte Abfrage lautet:

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

Wenn Sie nur sicherstellen möchten, dass Kinder mit allen Werten in IN übereinstimmen list und none nicht in der Liste, verwenden Sie this (in 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
        )