2

MySQLデータベースがあり、データを挿入したいと思いました。私のDBには、とという名前の2つのテーブルがtx_yes_cantonsありtx_yes_areasます。

カントンテーブルで、ある地域のID(私の場合はuid)を取得したいと思います。今私がこれを試すとき:

INSERT INTO `tx_yes_cantons` (tx_yes_areas_uid, cantonname, code)
    VALUES (
        ((SELECT `uid` FROM `tx_yes_areas` WHERE `areaname` Like 'Genferseeregion'), 'Genf', 'ge'),
        ((SELECT `uid` FROM `tx_yes_areas` WHERE `areaname` Like 'Mittelland'), 'Freiburg', 'fr'),
        ((SELECT `uid` FROM `tx_yes_areas` WHERE `areaname` Like 'Nordwestschweiz'), 'Basel-Stadt', 'bs'),
        ((SELECT `uid` FROM `tx_yes_areas` WHERE `areaname` Like 'Zentralschweiz'), 'Obwalden', 'ow'),
        ((SELECT `uid` FROM `tx_yes_areas` WHERE `areaname` Like 'Tessin'), 'Tessin', 'ti'),
        ((SELECT `uid` FROM `tx_yes_areas` WHERE `areaname` Like 'Zürich'), 'Zürich', 'zh'),
        ((SELECT `uid` FROM `tx_yes_areas` WHERE `areaname` Like 'Ostschweiz'), 'Schaffhausen', 'sh');

タイトルにエラーがあります。なんで?何も悪いことはありません..:S

4

2 に答える 2

2

データベースで次のクエリを実行してみてください。

select areaname, count(*) from tx_yes_areas group by (areaname) having count(*)>1;

返されるすべての結果は、重複の可能性を示します。エリア名のいずれかが挿入クエリの1つと類似している場合は、tx_yes_areasテーブルから冗長なエントリを削除してみてください。

于 2013-03-12T11:04:09.667 に答える
2

一部のクエリは複数の行を返します。tx_yes_cantonsテーブルにすべての行を挿入する必要がある場合は、おそらく次のようなものが必要です。

INSERT INTO `tx_yes_cantons` (tx_yes_areas_uid, cantonname, code)
SELECT `uid`, 'Genf', 'ge'
FROM `tx_yes_areas` WHERE `areaname` = 'Genferseeregion'
UNION ALL
SELECT `uid`, 'Freiburg', 'fr'
FROM `tx_yes_areas` WHERE `areaname` = 'Mittelland'
UNION ALL
SELECT `uid`, 'Basel-Stadt', 'bs'
FROM `tx_yes_areas` WHERE `areaname` = 'Nordwestschweiz'
UNION ALL
SELECT `uid`, 'Obwalden', 'ow'
FROM `tx_yes_areas` WHERE `areaname` = 'Zentralschweiz'
UNION ALL
SELECT `uid`, 'Tessin', 'ti'
FROM `tx_yes_areas` WHERE `areaname` = 'Tessin'
UNION ALL
SELECT `uid`, 'Zürich', 'zh'
FROM `tx_yes_areas` WHERE `areaname` = 'Zürich'
UNION ALL
SELECT `uid`, 'Schaffhausen', 'sh'
FROM `tx_yes_areas` WHERE `areaname` = 'Ostschweiz'

またはまた:

INSERT INTO `tx_yes_cantons` (tx_yes_areas_uid, cantonname, code)
SELECT tx_yes_areas.uid, codes.cantonname, codes.code
FROM
  tx_yes_areas INNER JOIN (
    SELECT 'Genferseeregion' areaname, 'Genf' cantonname, 'ge' code
    UNION ALL SELECT 'Mittelland', 'Freiburg', 'fr'
    UNION ALL SELECT 'Nordwestschweiz', 'Basel-Stadt', 'bs'
    UNION ALL SELECT 'Zentralschweiz', 'Obwalden', 'ow'
    UNION ALL SELECT 'Tessin', 'Tessin', 'ti'
    UNION ALL SELECT 'Zürich', 'Zürich', 'zh'
    UNION ALL SELECT 'Ostschweiz', 'Schaffhausen', 'sh') codes
  ON tx_yes_areas.areaname = codes.areaname
于 2013-03-12T11:04:19.420 に答える