sql >> Databáze >  >> RDS >> Oracle

Oracle získá řádky, které přesně odpovídají seznamu hodnot

Zkuste toto:

SELECT OrderID 
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID 
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)

Myšlenka je v kostce následující:

  • Spočítejte, kolik řádků OrderDetailTable odpovídá OrderedTable podle ItemID,
  • a poté to porovnejte s celkovým počtem ItemID z OrderedTable.

Pokud jsou tato dvě čísla stejná, dané OrderID "obsahuje" všechna ItemIDs. Pokud je jedno menší než druhé, existuje alespoň jedno ItemID, které není obsaženo v daném OrderID.

V závislosti na vašich primárních klíčích DISTINCT nemusí být nutné (ačkoli to nebolí).



  1. Zabijte dotaz MySQL při přerušení uživatele

  2. Najít všechny spoluautory – mapovací tabulka Faceting/Grouping for many to many

  3. Rozdíl mezi SELECT INTO a INSERT INTO v MySQL

  4. Byl by singleton dobrým designovým vzorem pro mikroblogovací stránky?