是否有一个SQL(或其变体)函数一次检查不等于多列?

Rus*_*ell 4 sql

正如我可以检查列是否不等于集合中给出的字符串之一.

SELECT * FROM table1 WHERE column1 NOT IN ('string1','string2','string3');
Run Code Online (Sandbox Code Playgroud)

是否有一个函数可以确保多列不等于单个字符串?也许是这样的.

SELECT * FROM table1 WHERE EACH(column1,column2,column3) <> 'string1';
Run Code Online (Sandbox Code Playgroud)

这样它可以产生与以下相同的效果:

SELECT * FROM table1 WHERE column1 <> 'string1' 
                       AND column2 <> 'string1' 
                       AND column3 <> 'string1';
Run Code Online (Sandbox Code Playgroud)

如果没有,最简洁的方法是什么?

Abe*_*ler 5

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

SELECT * FROM table1 WHERE 'string1' NOT IN (column1, column2, column3);
Run Code Online (Sandbox Code Playgroud)

这假设您使用的是SQL Server.

更新:

有些人指出了潜在的空比较问题(即使你想要的查询会有同样的潜在问题).这可以通过COALESCE以下方式使用来解决:

SELECT * FROM table1 WHERE 'string1' NOT IN (
     COALESCE(column1,'NA'), 
     COALESCE(column2,'NA'), 
     COALESCE(column3,'NA')
);
Run Code Online (Sandbox Code Playgroud)

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

  • 如果列可以为空,则不会返回正确的结果. (3认同)