sql >> Database >  >> RDS >> Sqlserver

SQL - rij niet weergeven wanneer aan twee criteria is voldaan

Dit komt door de manier waarop NOT IN werken. Als een van de waarden in de lijst NULL is, worden er geen resultaten geretourneerd. bijv.

SELECT  [TestColumn] = 3
WHERE   3 NOT IN (1, 2, NULL)

Geeft geen resultaten, en niet 3.

Als u het voorbeeld uitbreidt tot de equivalente OR-instructie, zult u zien waarom:

WHERE   3 != 1
AND     3 != 2
AND     3 != NULL

Sinds 3 != NULL Evalueert naar false omdat niets gelijk is aan NULL, de instructie retourneert false.

U kunt het gewenste resultaat op 3 manieren bereiken.

1) Gebruik ELSE in uw case-statement om ervoor te zorgen dat er geen NULL . is resultaten

SELECT  OrderNumber, Client, Product
FROM    Orders
WHERE    Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product ELSE '' END)

2) Verander IN niet gelijk zijn aan, aangezien uw case-statement sowieso maar 1 waarde retourneert

SELECT  OrderNumber, Client, Product 
FROM    Orders
WHERE   Product != (CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)

3) Herzie je logica, dit kan worden herschreven als

SELECT  OrderNumber, Client, Product 
FROM    Orders
WHERE   NOT (Product = 'product_1' AND Client = 'Client_a')


  1. Postgresql regexp_matches syntaxis werkt niet zoals verwacht

  2. RAILS:Hoe te zoeken naar alle objecten waarvan elke associatie een attribuut heeft dat niet null is

  3. Waarom is de door PostgreSQL JDBC voorbereide instructiedrempel standaard ingesteld op 5?

  4. Kan de null-waarde van JSON_EXTRACT niet detecteren