【发布时间】:2017-12-19 23:34:16
【问题描述】:
下面的 SQL 从概念上复制了我试图解决的问题。尽管传递了 NOT IN 子句,但所有三个记录都会返回。
SELECT * FROM (
SELECT 'JACK' AS VALUE FROM DUAL
UNION
SELECT 'JOHN' AS VALUE FROM DUAL
UNION
SELECT 'BOB' AS VALUE FROM DUAL
) WHERE VALUE NOT IN (SELECT 'BOB,JOHN' FROM DUAL);
我有一个表,其中包含一个分隔字符串,我想将其用作从数据集中排除记录的条件。但是,我遇到的问题是返回的字符串没有分解为其分隔项。我希望将以上内容翻译为:
SELECT * FROM (
SELECT 'JACK' AS VALUE FROM DUAL
UNION
SELECT 'JOHN' AS VALUE FROM DUAL
UNION
SELECT 'BOB' AS VALUE FROM DUAL
) WHERE VALUE NOT IN ('BOB','JOHN');
【问题讨论】:
-
您有一个包含分隔字符串的表?为什么?如果您正确使用数据库并单独存储字符串,则编写查询不会有问题。
-
返回所有三个记录,因为
'BOB,JOHN'是一个单个字符串值。显然是'BOB,JOHN' != 'BOB'和'BOB,JOHN' != 'JACK'和'BOB,JOHN' != 'JOHN'。所以结果是正确的。问题是您将集合存储为字符串而不是更合适的内容,例如数组或表格。 -
您好,感谢您的 cmets 并完全同意。我会使用表格来保存值,但在我工作的公司中采用了这种方法,因此我必须按照我原来帖子中描述的方式工作。