0

insert ステートメントのネストされた SELECT が実際の列を選択する代わりに COUNT(*) 関数を使用しているため、MySQL は私を悲しませていますか? それで、回避策は何ですか?

ストーリーは次のとおりです。

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

ありがとう。

4

2 に答える 2

1

MySQL は、この種の複数列を返すサブクエリをサポートしていないため、表示されるエラー メッセージは、VALUES句に 1 つのサブクエリしか含まれていないためです。

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
;

( MySQL 5.6 リファレンス マニュアルの§13.2.5.1「INSERT ... SELECT構文」を参照してください。)

于 2012-10-12T20:40:43.220 に答える
0

INSERT INTO テスト (`language`,`count`)

する必要があります

INSERT INTO test (language,count)
于 2013-12-09T13:51:06.627 に答える