【发布时间】:2021-01-14 11:34:32
【问题描述】:
我正在尝试在laravel 中复制以下psql 查询:
SELECT
DISTINCT
I.id,
T.id,
T.name,
I.first_name,
I.middle_name,
I.last_name,
I.dob,
CASE WHEN NOT E.email IS NULL THEN '<<' ELSE '' END
FROM individuals AS I
LEFT JOIN titles AS T ON I.title_id = T.ID
LEFT JOIN individuals_emails_map AS IEM ON IEM.individual_id = I.id
LEFT JOIN emails AS E ON E.id = IEM.email_id;
当我使用查询生成器并编写时:
DB::table('individuals AS I')
->join('titles AS T', 'T.id', '=', 'I.title_id')
->leftjoin('individuals_emails_map AS IEM', 'IEM.individual_id', '=', 'I.id')
->leftjoin('emails AS E', 'E.id', '=', 'IEM.email_id')
->distinct('I.title_id', 'T.name', 'I.first_name', 'I.middle_name', 'I.last_name', 'I.dob')
->select('T.id','T.name', 'I.first_name','I.middle_name','I.last_name','I.dob')
->get();
...它工作正常,但是当我尝试插入 CASE 行时:
DB::table('individuals AS I')
->join('titles AS T', 'T.id', '=', 'I.title_id')
->leftjoin('individuals_emails_map AS IEM', 'IEM.individual_id', '=', 'I.id')
->leftjoin('emails AS E', 'E.id', '=', 'IEM.email_id')
->distinct('I.title_id', 'T.name', 'I.first_name', 'I.middle_name', 'I.last_name', 'I.dob')
->select('T.id','T.name', 'I.first_name','I.middle_name','I.last_name','I.dob',
DB::raw("CASE WHEN NOT E.email IS NULL THEN '<<' ELSE '' END"))
->get();
...我收到以下错误:
Undefined table: 7 ERROR: missing FROM-clause entry for table "e"
我做错了什么?
【问题讨论】:
-
原始查询中缺少 from 子句
-
@dqureshiumar 你能详细说明一下吗?我应该在哪里有一个 from 子句?为什么查询的其余部分在没有 from 子句的情况下工作?为什么我需要在连接中使用 from 子句?
-
我没试过,但尝试更改引号
DB::raw('CASE WHEN NOT E.email IS NULL THEN "<<"ELSE "" END')) -
@dqureshiumar 同样的错误
-
确保你所有的连接都是正确的......我仍然在试图弄清楚。表名是
e还是E?
标签: laravel case psql laravel-query-builder