MySql查询到Postgres查询。帖子不支持IF条件

时间:2016-02-25 11:04:29

标签: php mysql sql postgresql laravel

我想把我的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');

2 个答案:

答案 0 :(得分: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');

答案 1 :(得分:0)

Postgres不支持Query中的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');