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 时,它会执行语句并返回结果。你不需要使用getDB::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 中的查询和子查询连接的主要内容,如果未能解决你的问题,请参考以下文章

sql中的SQL连接和子查询

MySQL 中的 While 循环使用连接和子查询选择数据

mysql连接查询和子查询

oracle中的多表查询和子查询以及一些注意事项

oracle之连接查询和子查询

多个内连接和子查询的查询优化