sql >> Databasteknik >  >> RDS >> Mysql

Hur man hittar om en lista/uppsättning är exakt inom en annan lista

Du kan fortfarande använda having , men testa för varje produkt -- och för frånvaron av någon annan produkt:

SELECT o.order_id
FROM orders o
GROUP BY o.order_id
HAVING SUM( product_id = 222 ) > 0 AND
       SUM( product_id = 555 ) > 0 AND
       SUM( product_id NOT IN (222, 555) ) = 0 ;

Observera att detta använder förkortningen MySQL, där booleska uttryck behandlas som siffror med 1 för true och 0 för falskt. Standardsyntaxen är:

HAVING SUM( CASE WHEN product_id = 222 THEN 1 ELSE 0 END) > 0 AND
       SUM( CASE WHEN product_id = 555 THEN 1 ELSE 0 END ) > 0 AND
       SUM( CASE WHEN product_id NOT IN (222, 555) THEN 1 ELSE 0 END ) = 0 ;



  1. Hur tar man bort alla icke-alfanumeriska tecken från en sträng i MySQL?

  2. Oracle-anslutningssträng utan tnsnames.ora-fil

  3. Oracle SQL - få antal dagar mellan två datum för en angiven månad

  4. Dynamisk tabellpartitionering i postgres