Php 如何将左联接中包含联接的sql转换为查询生成器? 我需要从sql编写一个查询生成器,它在左连接中有一个连接。 这是在另一个左连接中有一个连接的SQL。 (问题)这是我试图从上面的SQL转换的查询生成器。
但是,我的查询生成器是错误的。 它会显示一条错误消息 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,了解正确的语法 并生成SQL SQL:从Php 如何将左联接中包含联接的sql转换为查询生成器? 我需要从sql编写一个查询生成器,它在左连接中有一个连接。 这是在另一个左连接中有一个连接的SQL。 (问题)这是我试图从上面的SQL转换的查询生成器。,php,sql,laravel,join,query-builder,Php,Sql,Laravel,Join,Query Builder,但是,我的查询生成器是错误的。 它会显示一条错误消息 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,了解正确的语法 并生成SQL SQL:从v\u dts左连接中选择v\u dts*(in\u h内部连接in\u d2onin\u h文档中的文档中的代码和文档中的文档中的代码 有人能帮我解决我的问题吗? 谢谢。您需要一个子查询左联接->leftJoin('in_h',function($join_in_h){…}不执行子查
v\u dts
左连接中选择v\u dts
*(in\u h
内部连接in\u d2
onin\u h
文档中的文档中的代码和文档中的文档中的代码
有人能帮我解决我的问题吗?
谢谢。您需要一个子查询左联接->leftJoin('in_h',function($join_in_h){…}
不执行子查询连接;这是一个带有奇特连接子句的常规左连接
改用->leftJoinSub
可以使用joinSub、leftJoinSub和rightJoinSub方法将查询连接到子查询。这些方法中的每一个都接收三个参数:子查询、其表别名和定义相关列的闭包
编写子查询
$ref_books = DB::table('in_h')
->select('in_d2.ref_book')
->join('in_d2', function($join){
$join->on('in_h.doc_code','=','in_d2.doc_code')
->where('in_h.book','=','in_d2.book');
})
->where('in_h.doc_code','=','IN')
->groupBy('in_d2.ref_book');
并在另一个查询中使用它
$order_progress = DB::table('v_dts')
->select('v_dts.*')
->leftJoinSub($ref_books, 'i',function($join){
$join->on('v_dts.book', '=', 'i.ref_book');
})
->get();
您可以使用转储生成的SQL以进行调试
看
注意:我没有Laravel,所以我无法检查它是否100%正确,但它应该让您走上正确的道路。这看起来像Perl,但您使用的是什么查询生成器?您可以让它打印生成的SQL吗?这是php Laravel的查询生成器。生成的SQL显示在错误消息中SQL:选择v_dts.*从v_dts left join(in_h.doc\u code=in_d2.doc\u code和in_h.book=in_d2.book和in_h.doc\u code=in)中选择v_dts.
感谢您耐心的解释。这是我的正确答案。
$ref_books = DB::table('in_h')
->select('in_d2.ref_book')
->join('in_d2', function($join){
$join->on('in_h.doc_code','=','in_d2.doc_code')
->where('in_h.book','=','in_d2.book');
})
->where('in_h.doc_code','=','IN')
->groupBy('in_d2.ref_book');
$order_progress = DB::table('v_dts')
->select('v_dts.*')
->leftJoinSub($ref_books, 'i',function($join){
$join->on('v_dts.book', '=', 'i.ref_book');
})
->get();