sql >> Database teknologi >  >> RDS >> Sqlserver

SQL - vis ikke række, når to kriterier er opfyldt

Dette er på grund af måden NOT IN arbejder. Hvis nogen af ​​værdierne på listen er NULL, vil den ikke returnere nogen resultater. f.eks.

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

Returnerer ingen resultater og ikke 3.

Hvis du udvider eksemplet til den tilsvarende OR-sætning, vil du se hvorfor:

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

Siden 3 != NULL Evalueres til falsk, da intet er lig med NULL, og sætningen returnerer falsk.

Du kan opnå det ønskede resultat på 3 måder.

1) Brug ELSE i din sagserklæring for at sikre ingen NULL resultater

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

2) Skift IN til ikke lig, da din case-opgørelse alligevel kun vil returnere 1 værdi

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

3) Revider din logik, denne kan omskrives som

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


  1. Hvordan tester man i og mellem hver af flere borde?

  2. Hvordan logger jeg SQL-sætninger i Vapor 3/Fluent?

  3. Sådan opretter du et databasediagram i Access

  4. Hvordan viser man kun felter uden nul i mysql gennem php og HTML?