sql - 在 where 子句 Postgresql 中的情况
问题描述
我有一个这样的查询:
SELECT *
FROM table
WHERE t1.name||t1.lastname||... ilike ANY (ARRAY['%Muller%'])
OR t1.name||t1.lastname||... ilike all (ARRAY['%Muller%'])
我想添加 CASE WHEN 所以我的查询是:
SELECT *
FROM table
WHERE t1.name||t1.lastname||... ilike CASE WHEN TRUE IS TRUE THEN
ANY (ARRAY['%Muller%']) ELSE all (ARRAY['%Muller%']) END
所以我可以避免再次复制和粘贴整个字段。
解决方案
您可以使用LATERAL
避免多次连接:
SELECT *
FROM table t1, LATERAL(SELECT t1.name||t1.lastname||...) s(c)
WHERE s.c ilike ANY (ARRAY['%Muller%'])
OR s.c ilike ALL (ARRAY['%Muller%'])
推荐阅读
- ios - 使用导航控制器传递数据时 viewDidLoad() 加载两次 - SWIFT
- python - 阻止 StanfordCoreNLP 连接到 StanfordCoreNLP 服务器
- ssh - 是否可以将我的本地电脑放在 gcloud 项目域中?
- python - 如何将 TkInter 中的按钮分配给我的脚本?
- android - 在 PageKeyedDataSource 中调用挂起函数的正确方法
- javascript - Google Chrome 中视频流处理的性能
- codeeffects - 如何为代码效果提供自定义 gui?
- reactjs - 笑话:测试异步函数
- python - Flask WTForm DateField 只接受今天和未来的日期
- fabricjs - 更改由 fabric.util.groupSVGElements 生成的对象类型