sql >> Database >  >> RDS >> Oracle

Oracle krijgt rijen die exact overeenkomen met de lijst met waarden

Probeer dit:

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

Het idee is in een notendop als volgt:

  • Tel hoeveel OrderDetailTable-rijen overeenkomen met OrderedTable op ItemID,
  • en vergelijk dat dan met het totale aantal Item-ID's van OrderedTable.

Als deze twee getallen gelijk zijn, "bevat" de opgegeven OrderID alle ItemID's. Als de ene kleiner is dan de andere, is er ten minste één ItemID die niet in de opgegeven OrderID zit.

Afhankelijk van uw primaire sleutels, de DISTINCT is misschien niet nodig (hoewel het geen pijn doet).



  1. Converteer door komma's gescheiden string naar array in PL/SQL

  2. Postgresql-query voor het verkrijgen van een ouder-kindrelatie op n-niveau opgeslagen in een enkele tabel

  3. MySQL MariaDB - Query met behulp van tijdelijke tabel

  4. Waarom negeert Oracle SQL Optimizer het indexpredikaat voor deze weergave?