sql - 是否有单个 SQL(或其变体)函数可以一次检查多个列的不等于?

标签 sql

就像我可以检查一列是否不等于集合中给出的字符串之一一样。

SELECT * FROM table1 WHERE column1 NOT IN ('string1','string2','string3');

是否有一个函数可以确保多列不等于单个字符串?也许像这样。
SELECT * FROM table1 WHERE EACH(column1,column2,column3) <> 'string1';

这样它就会产生与以下相同的效果:
SELECT * FROM table1 WHERE column1 <> 'string1' 
                       AND column2 <> 'string1' 
                       AND column3 <> 'string1';

如果不是,那么最简洁的方法是什么?

最佳答案

我相信您可以在第一个示例中反转列和常量:

SELECT * FROM table1 WHERE 'string1' NOT IN (column1, column2, column3);

这假设您使用的是 SQL Server。

更新:

一些人指出了潜在的空值比较问题(即使您想要的查询具有相同的潜在问题)。这可以通过使用 COALESCE 来解决。通过以下方式:
SELECT * FROM table1 WHERE 'string1' NOT IN (
     COALESCE(column1,'NA'), 
     COALESCE(column2,'NA'), 
     COALESCE(column3,'NA')
);

您应该将 'NA' 替换为与 'string1' 不匹配的值。如果您不允许列 1,2 和 3 为空,这甚至不是问题。

关于sql - 是否有单个 SQL(或其变体)函数可以一次检查多个列的不等于?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927005/

相关文章:

sql - SQL Server 中的递归查询问题

python - SQL 查询计算来自 SQL Server 中同一表的不同行的计算

mysql - 如何仅合并多个表中的一列?

sql - Big Query 多表

sql - SQL 中的自定义排序

mysql - 合并具有重复主键和外键的数据库

sql - 如何将随机整数插入到 PostgreSQL 中的特定列

SQL - 如何更改值

mysql - 基于事件顺序的 SQL 查询

mysql - sql查询字符串中的整数