【发布时间】:2018-05-22 15:19:00
【问题描述】:
我正在尝试找出一个有效的 (Oracle) SQL 语句来验证一列是否至少包含一次特定的值列表。
一种选择是过滤该列表,输出所有不同的值,然后对它们进行计数。所以,是这样的:
SELECT count(*)
FROM (
SELECT DISTINCT columnname
FROM table
WHERE columnname in ('a', 'b', 'c')
)
;
(然后检查count(*)是否返回数字3)
这样做的问题是 DISTINCT 语句会查看整个表,这在性能方面非常糟糕。我的列表的所有三个值都可能在最开始,所以我不需要查看数百万其他行。我只想知道该列包含'a','b'和'c'。
有没有人想办法有效地解决这个问题?
提前致谢!
【问题讨论】: