3

正常に動作する選択クエリがあります。しかし、INSERT ステートメントにラップすると、エラーが発生します。

エラー 1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、3 行目の '(SELECT DISTINCT NULL AS id,NULL AS core_value_id,NULL AS ' の近くで使用する正しい構文を確認してください。translation_id

この問題は、ソース テーブルごとに 1 つの挿入を使用することで解決できます。しかし、単一のクエリでそれを行う方法はありますか? なぜこれが機能しないのですか?

これがクエリです。

INSERT INTO `some_table`
(
(SELECT DISTINCT
NULL AS `id`,
NULL AS `core_value_id`,
NULL AS `translation_id`,
t1.`upc` AS `source_value`,
t1.`upc` AS `value`,
COUNT(*) AS `count`
FROM  `source_table_1` t1
GROUP BY `upc`)

UNION ALL
(SELECT DISTINCT
NULL,NULL,NULL,
t1.`upc`,
t1.`upc`,
COUNT(*) AS `count`
FROM  `source_table_2` t1
GROUP BY `upc`
)
ORDER BY `count` DESC
)

テーブル定義は次のとおりです。

CREATE TABLE `some_table` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `core_value_id` int(11) DEFAULT NULL,
 `translation_id` int(11) DEFAULT NULL,
 `source_value` varchar(255) NOT NULL,
 `value` varchar(255) DEFAULT NULL,
 `count` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `core_value_id` (`core_value_id`),
 KEY `translation_id` (`translation_id`),
 KEY `source_value` (`source_value`),
 KEY `value` (`value`),
 KEY `count` (`count`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

source_tables は次のようになります。

CREATE TABLE `source_table_1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `upc` bigint(20) DEFAULT NULL,
 PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8

upc 列には次のようなデータが含まれます。

123456789012
123456789013
123456789014
123456789015
123456789016
123456789017
4

1 に答える 1

5

私の推測ではSELECT、個々の選択の上に句がありません。さらに、括弧が適切ではありませんでした。代わりにこれを試してください:

INSERT INTO `some_table`
SELECT      * 
FROM 
            (
             SELECT   DISTINCT NULL AS `id`, NULL AS `core_value_id`,
                      NULL AS `translation_id`, t1.`upc` AS `source_value`,
                      t1.`upc` AS `value`, COUNT(*) AS `count`
             FROM     `source_table_1` t1
             GROUP BY `upc`

             UNION ALL

             SELECT   DISTINCT NULL, NULL, NULL, t1.`upc`, t1.`upc`, 
                      COUNT(*) AS `count`
             FROM     `source_table_2` t1
             GROUP BY `upc`
            ) AS dt
ORDER BY    `count` DESC
于 2012-10-31T06:39:24.327 に答える