sql—如何检查集合中是否有多个字段之一?

lrpiutwd  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(288)

我正在从c++代码生成sql查询(sqllite3)
我需要有效地写下以下请求。

SELECT * FROM T
WHERE T.field1 IN (V1, V2, V3, ...) or T.field2 IN (V1, V2, V3, ...);

如何优化它:避免粘贴两次(v1,v2,v3,…),或者取(t.field1,t.field2)和(v1,v2,v3,…)的交集,或者创建语句局部变量(v1,v2,v3,…),或者其他什么?
sql语句被创建为一个字符串,然后传递给sql解析引擎。

wj8zmpe1

wj8zmpe11#

创建 CTE 并按如下方式使用:

WITH cte(x) AS (VALUES (V1), (V2), (V3), ....)
SELECT * FROM T
WHERE T.field1 IN (SELECT * FROM cte) 
   OR T.field2 IN (SELECT * FROM cte);
yh2wf1be

yh2wf1be2#

你可以改变条件:

where v1 in (t.field1, t.field2) or
      v2 in (t.field1, t.field2) or
      . . .

相关问题