2014-10-30 60 views
-1

我从这段代码中得到#1064错误我试图在values命令中使用子查询我是mySQL的新手,并且无法发现错误。mysql中子查询中的语法错误

CREATE TEMPORARY TABLE TempTable(myid INT,points INT) 
INSERT INTO TempTable 
values(1, 
points 
(
SELECT player.team, COUNT(*) AS count 
FROM playerpoints 
JOIN player ON playerpoints.PlayerID = player.PlayerID 
WHERE player.team = 'ManU' 
AND EXTRACT(MONTH FROM playerpoints.date) <07 
GROUP BY player.team 
)); 

INSERT INTO TempTable 
values(2, 
points 
(
    SELECT player.team, COUNT(*) AS count2 
    FROM playerpoints 
    JOIN player ON playerpoints.PlayerID = player.PlayerID 
    WHERE player.team = 'ManU' 
    AND EXTRACT(MONTH FROM playerpoints.date) >07 
GROUP BY player.team 
)); 

DROP TABLE TempTable; 
+0

你的子查询是否自行返回任何东西? – pancho018 2014-10-30 16:24:56

+1

'points'后面需要逗号。你的子查询只能返回*一个*行。我甚至不确定你可以在一个'INSERT'语句中使用子查询。 – 2014-10-30 16:26:24

+0

发布示例时,最好使用产生错误的最简单的示例。我猜你仍然会得到错误,如果你遗漏了第二条INSERT语句。 – cherdt 2014-10-30 16:31:17

回答

1

要使用的构造是INSERT INTO ... SELECT ...。您不使用子查询(或关键字VALUES)。

INSERT INTO TempTable (myid, points) 
SELECT player.team, COUNT(*) AS count 
FROM playerpoints 
JOIN player ON playerpoints.PlayerID = player.PlayerID 
WHERE player.team = 'ManU' 
AND EXTRACT(MONTH FROM playerpoints.date) <07 
GROUP BY player.team; 

基本上,你想要的SELECT返回行()你要插入(以正确的顺序)。

文档:http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

0

否分号在第一行的末尾。此外,INSERT语法可以清理一下。最后,GROUP BY子句不是必需的。试试这个:

试试这个:

CREATE TEMPORARY TABLE TempTable(myid INT,points INT); 

INSERT INTO TempTable 
values(1, (
    SELECT COUNT(*) 
    FROM playerpoints 
    JOIN player ON playerpoints.PlayerID = player.PlayerID 
    WHERE player.team = 'ManU' 
    AND EXTRACT(MONTH FROM playerpoints.date) <07 
)); 

INSERT INTO TempTable 
values(2, (
    SELECT COUNT(*) 
    FROM playerpoints 
    JOIN player ON playerpoints.PlayerID = player.PlayerID 
    WHERE player.team = 'ManU' 
    AND EXTRACT(MONTH FROM playerpoints.date) >07 
)); 

... 

DROP TABLE TempTable; 

这是假定每个条目playerpoints记录一个点。否则,您需要类似SELECT SUM(playerpoints.points)而不是SELECT COUNT(*)