2014-10-30 63 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(*)