laravel 中的查询和子查询连接
Posted
技术标签:
【中文标题】laravel 中的查询和子查询连接【英文标题】:query and subquery join in laravel 【发布时间】:2017-09-15 08:27:51 【问题描述】:我正在 laravel 上尝试这个,但我遇到了这样的错误
SQLSTATE[42601]: Syntax error: 7 ERROR: subquery in FROM must have an alias
LINE 3: (select * from subcategory a inner join s...
HINT: For example, FROM (SELECT ...) [AS] foo. (SQL: select * from
mastercategory c
inner join
(select * from subcategory a inner join subling b on
a.idsubcategory=b.idsubcategory_subcategory) on c.idcategory=a.idsubcategory_subcategory
我正在尝试使用(子类别和子分类)的联接子查询来加入主类别
$users = DB::select(DB::raw(" select * from mastercategory c
inner join (select * from subcategory a inner join subling b on
a.idsubcategory=b.idsubcategory_subcategory) on
c.idcategory=a.idsubcategory_subcategory "))->get();
如何实现这个我不想使用模型提前谢谢
这是我的更新
$users = DB::raw(" select a.*,b.* from mastercategory a
inner join
(select b.*,c.* from subcategory b inner join subling c on
b.idsubcategory=c.idsubcategory_subcategory) on
a.idcategory=b.idcategory_mastercategory");
为什么我得到空值
【问题讨论】:
使用DB::select(DB::raw())
时不需要使用get();
方法。所以你的语句应该是:$users = DB::select(DB::raw("THE_SELECTION_QUERY"));
@ShaktiPhartiyal 我们也不需要使用DB::raw()
和DB::select()
作为select()
的第一个参数是原始查询,即字符串。
【参考方案1】:
$users = DB::select("select * from mastercategory c
inner join (select * from subcategory a inner join subling b on
a.idsubcategory=b.idsubcategory_subcategory) as d on
c.idcategory=d.idsubcategory_subcategory");
当您使用DB::select
时,它会执行语句并返回结果。你不需要使用get
和DB::raw
(check here)。
您收到此错误是因为您没有为内部子查询提供别名。
【讨论】:
如果这是你想要的。请接受答案。这样就可以关闭了。【参考方案2】:您必须命名每个子查询。例如,使用这个:
select * from mastercategory c
inner join
(select * from subcategory a
inner join subling b on a.idsubcategory=b.idsubcategory_subcategory) as sub
on c.idcategory=sub.idsubcategory_subcategory
我已将粗体部分:a.idsubcategory=b.idsubcategory_subcategory) 添加为 sub
【讨论】:
以上是关于laravel 中的查询和子查询连接的主要内容,如果未能解决你的问题,请参考以下文章