【问题标题】:Syntax error or access violation: 1064 , Syntax error on LEFT JOIN Condition语法错误或访问冲突:1064,LEFT JOIN 条件上的语法错误
【发布时间】:2019-12-31 05:07:32
【问题描述】:

当我们使用左连接条件将两个表连接到第三个表时出现错误。

这是一个错误

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在 'ON(cnt.PKDID) 附近使用正确的语法 = pd.PKDID)) 在led.PKID = pkg.PKID 其中pkg.Sta' at line 3 (SQL: select count(*) as aggregate frompackagesaspkg left joineventsasev@987 987654331@EvnId=pkg.EvnId`左加入 (选择 pd.PKDID、pd.BsNaId、cnt.ContentList、bn.nature FROM package_dets 为 pd,busi_natures 为 bn WHERE pd.BsNaId = bn.BsNaId

LEFT JOIN(SELECT PKID, PKDID, ContentList FROM package_detcontents 按 PKDID 分组)cnt\n ON(cnt.PKDID = pd.PKDID)) 在led.PKID = pkg.PKID 其中pkg.Status = 活动和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);

【问题讨论】:

    标签: php sql laravel mariadb


    【解决方案1】:

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

    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;
    

    【讨论】:

    • 现在这个错误显示Syntax error or access violation: 1055 'eventm.package_detcontents.PKID' isn't in GROUP BY (SQL: select count(*) as aggregate from packages`为pkg左连接eventsevev.EvnId=pkg.EvnId左连接( SELECT pd.PKDID, pd.BsNaId, cnt.ContentList, bn.nature FROM package_dets AS pd`
    • @SagarCoder 我已经更新了脚本。你现在可以检查一下吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2014-04-29
    • 2017-10-08
    • 2015-10-12
    • 2014-08-19
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多