sql >> Databasteknik >  >> RDS >> Sqlserver

SQL - visa inte rad när två kriterier är uppfyllda

Detta beror på sättet NOT IN Arbetar. Om något av värdena i listan är NULL kommer det inte att returnera några resultat. t.ex.

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

Returnerar inga resultat och inte 3.

Om du utökar exemplet till motsvarande OR-sats kommer du att se varför:

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

Eftersom 3 != NULL Utvärderas till false eftersom ingenting är lika med NULL och satsen returnerar false.

Du kan uppnå det önskade resultatet på tre sätt.

1) Använd ELSE i ditt fallförklaring för att säkerställa att ingen NULL inte finns resultat

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

2) Ändra IN inte lika, eftersom din case-sats ändå bara returnerar 1 värde

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

3) Revidera din logik, denna kan skrivas om som

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


  1. PHP - hämtar förberedd stmt till klass:Klassen Fatal Error hittades inte

  2. Vad är skillnaden mellan utf8mb4 och utf8 teckenuppsättningar i MySQL?

  3. VARCHAR vs TEXT i MySQL

  4. Gör ingenting i en triggerprocedur