MySql 查询到 Postgres 查询。 Postgres 不支持 IF 条件
Posted
技术标签:
【中文标题】MySql 查询到 Postgres 查询。 Postgres 不支持 IF 条件【英文标题】:MySql Query to Postgres Query. Postges Not supporting IF Condition 【发布时间】:2016-06-08 02:52:05 【问题描述】:我打算将我的 laravel 应用程序数据库 mysql 更改为 postgres。我正在使用原始查询 这是我的查询:
select IF (modelno="" OR modelno IS NULL,name,concat(name, " / ",modelno)) as name, id from `models` where `deleted_at` is null order by `name` asc
当我将此查询用于 postgres 时,引发以下异常。
"""" 行 1 处或附近的零长度分隔标识符:选择 IF (modelno="" OR modelno IS NULL,name,concat(name, '...
我的 larvel 控制器代码如下,并且可以在 MySql 上正常工作:
DB::table('models')
->select(DB::raw('IF (modelno="" OR modelno IS NULL,name,concat(name, " / ",modelno)) as name, id'))
->orderBy('name', 'asc')
->whereNull('deleted_at')
->lists('name', 'id');
【问题讨论】:
【参考方案1】:我不认为 postgres 支持 IF,所以试试 CASE :
DB::table('models')
->select(DB::raw('CASE WHEN modelno="" OR modelno IS NULL then name else concat(name, " / ",modelno) as name, id'))
->orderBy('name', 'asc')
->whereNull('deleted_at')
->lists('name', 'id');
【讨论】:
谢谢。但案例陈述对我不起作用。 where 子句解决了我的问题。【参考方案2】:Postgres 不支持查询中的IF
语句。
但是这个问题的解决方案可以通过where
类来处理。
这里是示例:
DB::table('models')
->select(DB::raw("concat(name, modelno) as name, id"))
->orderBy('name', 'asc')
->where('modelno','=','')
->whereNull('deleted_at')
->orWhereNull('modelno')
->lists('name', 'id');
【讨论】:
以上是关于MySql 查询到 Postgres 查询。 Postgres 不支持 IF 条件的主要内容,如果未能解决你的问题,请参考以下文章
将使用 GROUP BY 的查询从 MySQL 转换为 Postgres 和 SQLite
MYSQL 从项目经理的一次查询,到MYSQL 查询语句优化方法多
HQL语句只查询一个字段返回啥值比如 Select name from PO;
Spring Batch - 无法在 Postgres 上创建元数据表并将实际数据加载到 mysql