我需要做一个select,但是我需要匹配where子句中的两个列表来过滤我的结果。比如:
SELECT * FROM TAB1
WHERE FieldPartition = W
AND Field1 IN (X1,X2...X600)
AND Field2 IN (Y1,Y1...Y600);
但是select仅在x1匹配y1、x2、y2等时返回。
我在where子句中加了一堆括号中的or-between-and,这很管用,但我需要另一种方法。
SELECT * FROM TAB1
WHERE FieldPartition = W
AND (Field1 = X1 AND Field2 = Y2) OR
(Field1 = X2 AND Field2 = Y2) OR
(Field1 = X600 AND Field2 = Y600);
上面的代码按预期工作,但需要很长时间才能运行,因为表很大,我希望有更快的东西。
有什么想法吗?
谢谢
2条答案
按热度按时间ztyzrc3y1#
简言之,在配置单元中使用一个简单的查询是不可能的,因为在配置单元中只能有一列
IN
子句,而您需要将表中的两列与值对匹配。请参阅此处的类似讨论。要实现目标,最简单的(但可能是效率最低的)方法是在一个集合上匹配一个集合,例如。
然而,这将运行
CONCAT
每行TAB1
,这可能不是你想要的。如果您想要更结构化的东西,您可能需要创建一个表,例如。
FILTER_TAB
,带列X
以及Y
,在此处加载所有筛选器值,然后使用JOIN
,例如。你可能想做
LEFT JOIN
或者LEFT OUTER JOIN
那就看你的要求了。9avjhtql2#
你试过:
自从我意识到
Field2 IN (...)
是多余的。