要搜索列中的多个值,我们可以使用IN
运算符,如下所示
SELECT * FROM some_table WHERE some_col IN ('v', 'a', 'l', 'u', 'e' , 's');
但是有没有办法在多列中搜索多个值?例如 - 想要选择col1,col2,.. col100 any
匹配的行(' v',' a',' l&#39 ;,' u',' e' s')
更新: -
虽然@Gordon的答案below可行,但情况是列数很多 - 有没有办法在不必为每列重复的IN语句的情况下完成此操作?
答案 0 :(得分:2)
一种简单的方法是多重比较。像这样:
SELECT *
FROM some_table
WHERE col1 IN ('v', 'a', 'l', 'u', 'e' , 's') OR
col2 IN ('v', 'a', 'l', 'u', 'e' , 's') OR
col3 IN ('v', 'a', 'l', 'u', 'e' , 's') OR
col4 IN ('v', 'a', 'l', 'u', 'e' , 's');
您的问题不清楚OR
或AND
是否是正确的连接器。
注意:有四列包含基本相同的值是可疑的。您可能想询问有关数据模型本身的其他问题。
编辑:
您可以使用正则表达式:
where concat_ws(':', col1, col2, col3, col4) ~ '^[values][:][values][:][values][:][values]$')
我认为这是难以理解的,难以维持,但我确信其他人有不同的意见。
答案 1 :(得分:0)
我会编写一个函数f(col)来检查它是否在('v','a','l','u','e','s')然后使用
f(col1)或f(col2)或......
你必须在某个地方指定列,所以这就越接近你所能得到的。
与之前的回复一样,我会问为什么col1,col2等不是单独表中的单个条目。可能有合理的原因,但在我的经验中是非常不寻常的 - 除非您无法控制数据库布局。一个单独的表就是这样做的SQL或关系数据库方法。
答案 2 :(得分:0)
这不是最漂亮的解决方案,但与标准解决方案相比,它确实提供了一些可扩展性(并且代码中的冗余更少):
select *
from some_table
where
to_tsvector (format ('%s %s %s %s %s', col1, col2, col3, col4, col5)) @@
to_tsquery('v | a | l | u | e | s')