2014-02-11 48 views
0

我不断收到在PHP以下错误:“您的SQL语法错误;检查对应于您的MySQL服务器版本正确的语法附近SQL语法错误在PHP

'IN (SELECT invoiceNo FROM sales2012 GROUP BY invoiceNo HAVING COUNT(invoiceNo)>1' 
at line 1 
使用手册

我的查询如下:

$query = "SELECT invoiceNo, invoiceDate, dueDate, customerID, customerName, 
dateTrans, postDate, description, grossSale, vat, netSale, quantity, 
branch, despatchNote 
FROM 
sales2012 WHERE invoiceNo IN (
    SELECT invoiceNo FROM sales2012 GROUP BY invoiceNo HAVING COUNT(invoiceNo)>1)"; 

当我运行像SELECT *一个简单的查询FROM sales2012我得到完美的结果,甚至当我运行查询,直到IN子句运行以及由于某种原因。当我运行整个事情时它崩溃。

我也使用SQL Workbench运行相同的代码,并打印出我正在查找的表格。我知道代码的作品,我只是不明白为什么它不能在PHP中工作。

我也改变了执行时间,但也没有工作。

任何帮助将不胜感激。 感谢

+0

你究竟在做什么? – Strawberry

+0

我试图在sales2012中打印所有重复项。我应该得到4作为输出。如果我使用没有IN子句的语法,它将打印2行而不是4,并使用IN子句打印错误 – goroved

+0

考虑提供正确的DDL(和/或sqlfiddle)与期望的结果集 – Strawberry

回答

2

正确的查询是:

$query = "SELECT invoiceNo, invoiceDate, dueDate, customerID, customerName, dateTrans, postDate, description, grossSale, vat, netSale, quantity, branch, despatchNote 
      FROM sales2012 
      WHERE invoiceNo IN (SELECT invoiceNo FROM sales2012 GROUP BY invoiceNo HAVING COUNT(invoiceNo)>1)"; 

但更好的查询是:

$query = "SELECT invoiceNo, invoiceDate, dueDate, customerID, customerName, dateTrans, postDate, description, grossSale, vat, netSale, quantity, branch, despatchNote 
      FROM sales2012 s1 
      INNER JOIN (SELECT invoiceNo FROM sales2012 GROUP BY invoiceNo HAVING COUNT(invoiceNo)>1) 
      as s2 on s2.invoiceNo = s1.invoiceNO"; 
+0

嗨,感谢您的回复。我确实在原始语法中有WHERE invoiceNo。我输入了更好的查询,现在它告诉我“栏位列表中的列'invoiceNo'不明确”。你知道这意味着什么吗? – goroved

+0

使用表sales2012中的别名,然后在select语句中使用此别名。例如:SELECT sales.invoiceNo,invoiceDate,dueDate,customerID,customerName,dateTrans,postDate,description,grossSale,vat,netSale,quantity,branch,despatchNote FROM sales2012 sales WHERE sales.invoiceNo IN(SELECT invoiceNo FROM sales2012 GROUP BY invoiceNo HAVING COUNT(invoiceNo)> 1)“; – Ganz

+0

IT WORKED !!!!非常感谢你!!!我花了2天的时间想办法解决这个问题!! – goroved

2

如果你看看这个:

FROM sales2012 IN (SELECT invoiceNo 

你会看到的东西是失踪。它应该类似于

FROM sales2012 
where somefield IN (SELECT invoiceNo 
+0

对不起,我确实做了有WHERE invoiceNo IN(SELECT),但由于某种原因,它不想为我工作 – goroved