【问题标题】:Error in SQL querySQL查询错误
【发布时间】:2015-09-29 06:11:03
【问题描述】:

我试图在 Visual Studio asp.net 中运行 SQL 查询,但出现此错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 '' AND JobID = jn.ID GROUP BY JOBID)) 附近,如已交付, ' 在第 1 行

但我看不出问题出在哪里。

private static string SearchSQL
{
    get{
        return @" set @sql = null;
            select
                group_concat(distinct
                    concat(
                        'max(case when PieceType = ''',
                        PieceType,
                        ''' then AdvisedQty end) AS ',
                        concat(PieceType)
                    )
                )into @sql
            FROM customer c
            LEFT JOIN job_address ja ON c.AccountCode = ja.Code AND c.Company_ID = ja.Company_ID
            JOIN  AddressType jat ON ja.AddressType = jat.ID and jat.Description = ''Debtor''
            LEFT JOIN job_new jn ON ja.JobID = jn.ID
            LEFT JOIN job_pieces jp ON ja.JobID = jp.ID

    WHERE c.Company_ID = ?compid;

    set @sql = concat('select 
                c.Name,
                COUNT(distinct jn.ID) as Jobs,
                SUM((select COUNT(ID) from jobstat where Status = ''DEL'' AND JobID = jn.ID GROUP BY JOBID)) as Delivered,
                SUM((select COUNT(ID) from jobstat where Status = ''POD'' AND JobID = jn.ID GROUP BY JobID)) as POD,
                (select COUNT(job_debriefs.ID) from job_debriefs WHERE JobID = jn.JobNo) as Debriefs,
                sum(jn.OutTurn) as Outturn,
                SUM(jn.ActualWeight) as GrossWt,
                SUM(jn.CBM) as CBM,
                jn.Department,
                (SELECT Name FROM job_address WHERE AddressType =3 AND JobID = jn.ID) as CollectName,
                (SELECT Name FROM job_address WHERE AddressType =2 AND JobID = jn.ID) as DeliverName,
                ', @sql, ' 
            FROM customer c
            LEFT JOIN job_address ja ON c.AccountCode = ja.Code AND c.Company_ID = ja.Company_ID
            JOIN  AddressType jat ON ja.AddressType = jat.ID and jat.Description = ''Debtor''
            LEFT JOIN job_new jn ON ja.JobID = jn.ID
            LEFT JOIN job_pieces jp ON ja.JobID = jp.ID

    WHERE c.Company_ID = ?compid
    GROUP BY c.ID');

    prepare stmt from @sql;
    execute stmt;
    deallocate prepare stmt;
                            ";
        }
    }

好的,我修复了单引号,但现在出现的错误是:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近'?compid GROUP BY c.ID' 在第 19 行

它正在寻找 compid,所以这不是问题

【问题讨论】:

  • 如果您尝试直接在 DBMS 中运行 SQL 代码,您可能会收到更有用的错误消息。
  • @TheTTGGuy 我尝试在 MySQL Workbench 中运行查询,但出现错误:Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'max(case when PieceType = 'Carton' then AdvisedQty end) AS Carton,max(case when ' at line 13
  • 那条线周围有双括号有什么原因吗?你应该只需要一个(这可能不是问题,但用单括号试试)
  • 将代码直接放入 MYSQL 时,请确保没有任何多余的单 '
  • 您忘记添加第二个单引号以进行转义:Status = ''DEL'' and Status = ''POD''

标签: c# mysql sql asp.net visual-studio


【解决方案1】:

您仍然在此处的字符串文字中,因此您需要将单引号加倍以在错误消息中摘录之前的 DEL 值上转义它们:

SUM((select COUNT(ID) from jobstat where Status = ''DEL'' AND JobID = jn.ID GROUP BY JOBID)) as Delivered,
SUM((select COUNT(ID) from jobstat where Status = ''POD'' AND JobID = jn.ID GROUP BY JobID)) as POD,

【讨论】:

  • 我需要为'Debtor' 这样做吗?
  • 好的,谢谢。但是还有一个错误:near '?compid GROUP BY c.ID'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
相关资源
最近更新 更多