正如我可以检查列是否不等于集合中给出的字符串之一.
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)
如果没有,最简洁的方法是什么?
我相信你可以在第一个例子中反转列和常量:
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列的空值,这甚至不是问题.