不等于不过滤掉任何东西

Where not equals not filtering anything out

我试图通过在 PROC SQL 中使用 WHERE <> 从 table 中过滤掉某些值。查询运行没有错误,但实际上并没有过滤掉任何东西。

ID   Category   Sub_Category
1    Food       Vegetables
2    Food       Chicken
3    Appliance  Mixer

我的代码如下所示:

PROC SQL;
CREATE TABLE APPLIANCE AS 
SELECT * FROM GENERAL_TABLE
WHERE Sub_Category <> "Chicken"
OR Sub_Category <> "Vegetables";
RUN;

我知道我可以将 where 语句切换为 WHERE = "Mixer" 但我想了解为什么 WHERE <> 没有过滤掉任何东西。

您需要 AND 而不是 OR

OR 表示如果至少有一个条件为真,那么它将显示该行。由于这些条件之一将始终为真,因此它将显示所有行。

而不是 <>OR,使用 INNOT IN

PROC SQL;
CREATE TABLE APPLIANCE AS 
SELECT * FROM GENERAL_TABLE
WHERE Sub_Category not in ("Chicken", "Vegetables");
RUN;