首页 > 解决方案 > 语法错误或访问冲突:1064,LEFT JOIN 条件上的语法错误

问题描述

使用左连接条件将两个表与第三个表连接时出现错误。

这是一个错误

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'ON(cnt.PKDID = pd.PKDID)) 附近使用的正确语法,如led. PKID= pkgPKID哪里pkgSta' at line 3 (SQL: select count(*) as aggregate frompackages aspkg left joinevents asev onev .EvnId =pkg .EvnId` left join (SELECT pd.PKDID, pd.BsNaId, cnt.ContentList, bn.nature FROM package_dets as pd, busi_natures as bn WHERE pd.BsNaId = bn.BsNaId

LEFT JOIN(SELECT PKID, PKDID, ContentList FROM package_detcontents GROUP BY PKDID)cnt\n ON(cnt.PKDID = pd.PKDID)) 领导上ledPKID= pkgPKID哪里pkgStatus= 主动和ev. enventNm=生日)

这是我的代码,我有错误。

->leftJoin(DB::raw("(SELECT pd.PKDID, pd.BsNaId, cnt.ContentList, bn.nature FROM package_dets as pd, busi_natures as bn WHERE pd.BsNaId = bn.BsNaId 
    LEFT JOIN(SELECT PKID, PKDID, ContentList FROM package_detcontents GROUP BY PKDID)cnt
    ON(cnt.PKDID = pd.PKDID)) as led"), 
    function($join){
    $join->on("led.PKID","=","pkg.PKID");
    })

这是完整的代码

$package = DB::table("packages as pkg")
->select(DB::raw("pkg.PKID, pkg.EvnId, pkg.PkgNm, pkg.link, pkg.cross_price, pkg.off_percent, pkg.images, pkg.price, pkg.forpeople, pkg.Minsrating, pkg.Plsrating, pkg.remark, pkg.Status, led.nature, ev.enventNm"))
      ->leftJoin("events as ev","ev.EvnId","=","pkg.EvnId")
->leftJoin(DB::raw("(SELECT pd.PKDID, pd.BsNaId, cnt.ContentList, bn.nature FROM package_dets as pd, busi_natures as bn WHERE pd.BsNaId = bn.BsNaId 
    LEFT JOIN(SELECT PKID, PKDID, ContentList FROM package_detcontents GROUP BY PKDID)cnt
    ON(cnt.PKDID = pd.PKDID)) as led"), 
    function($join){
    $join->on("led.PKID","=","pkg.PKID");
    })
->where("pkg.Status", "=", "Active")
->where("ev.enventNm", "=", $envent)
->paginate(50);

标签: phpsqllaravelmariadb

解决方案


您的查询语法有问题。这应该是您的查询-

SELECT pd.PKDID, 
   pd.BsNaId, 
   cnt.ContentList, 
   bn.nature
FROM package_dets AS pd
 INNER JOIN busi_natures AS bn ON pd.BsNaId = bn.BsNaId
 /*Above INNER JOIN can be any other JOIN as per your requirement*/
 LEFT JOIN
(
    SELECT PKID, 
           PKDID, 
           ContentList
    FROM package_detcontents
    GROUP BY PKID,PKDID,ContentList
) cnt 
ON cnt.PKDID = pd.PKDID;

推荐阅读