就像我可以检查一列是否不等于集合中给出的字符串之一一样。
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/