2012-10-12 16 views
0

MySQL是否給我帶來悲傷,因爲insert語句中的嵌套SELECT使用COUNT(*)函數而不是選擇實際列?那麼,解決方法是什麼?mysql列數不匹配值count(redux):是的。還是呢?

這裏的故事:

mysql> explain test; 
+----------+----------------------+------+-----+---------+-------+ 
| Field | Type     | Null | Key | Default | Extra | 
+----------+----------------------+------+-----+---------+-------+ 
| language | varchar(50)   | YES |  | NULL |  | 
| count | smallint(5) unsigned | YES |  | NULL |  | 
+----------+----------------------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

mysql> SELECT languages.name, COUNT(*) AS `total` FROM languages JOIN events ON languages.id  = events.language_id GROUP BY name HAVING total > 250 ORDER BY total DESC; 
+-----------+-------+ 
| name  | total | 
+-----------+-------+ 
| Spanish | 60079 | 
| Foochow | 2838 | 
| Mandarin | 2396 | 
| Russian | 1675 | 
| Arabic | 1410 | 
| Cantonese | 1358 | 
| Korean | 736 | 
| French | 531 | 
| Punjabi | 426 | 
| Urdu  | 408 | 
| Hebrew | 276 | 
| Pashto | 255 | 
+-----------+-------+ 
12 rows in set (0.00 sec) 

mysql> INSERT INTO test (`language`,`count`) VALUES ((SELECT languages.`name`, COUNT(*) AS `total` FROM languages JOIN events ON languages.id = events.language_id GROUP BY name HAVING total > 250 ORDER BY total DESC)); 
ERROR 1136 (21S01): Column count doesn't match value count at row 1 

感謝。

回答

1

MySQL不支持這種多列返回的子查詢,所以你看到的錯誤信息是因爲VALUES子句只包含一個子查詢,它在某種意義上只是一列。

要解決它,你可以跳過VALUES語法,只是寫:

INSERT 
    INTO test (`language`,`count`) 
SELECT languages.`name`, COUNT(*) AS `total` 
    FROM languages 
    JOIN events 
    ON languages.id = events.language_id 
GROUP 
    BY name 
HAVING total > 250 
ORDER 
    BY total DESC 
; 

(見§13.2.5.1 "INSERT ... SELECT Syntax" in the MySQL 5.6 Reference Manual。)

0

INSERT INTO測試(`language`,`count`)

應該

INSERT INTO test (language,count) 
相關問題