5

特定のサブクエリに問題があります:

LOAD DATA INFILE 'some_address' INTO TABLE 'some_table' 
FIELDS TERMINATED BY 'field_terminate' ENCLOSED BY '"' 
ESCAPED BY '\\' ('fieldX', 'fieldY'....'fieldZ') 
SET fieldZ= (SELECT Id FROM another_table WHERE Name = fieldZ)

私が基本的に達成したいのは、ファイルのフィールドを、クエリの実行時に別のテーブルにかなり配置されている対応する ID に置き換えることです。これは可能ですか?

事前にたくさんありがとう。私はインターネット全体を見てきました。これまでのところ運が悪い..

ああ、上記のクエリでは、基本的にサブクエリがスカラーではないというエラーが表示されます。サブクエリが各行の挿入に実行されているのではなく、すべての行のすべての fieldZ が組み合わされて実行されていることは明らかです (したがって、複数の ID が返されます)。

4

1 に答える 1

1

SET で列のデータを使用するには、それを変数に入れる必要があります。

LOAD DATA INFILE 'some_address' INTO TABLE 'some_table' 
    FIELDS
        TERMINATED BY 'field_terminate'
        ENCLOSED BY '"' 
        ESCAPED BY '\\'
('fieldX', 'fieldY', ..., @fieldZ) 
SET fieldZ = (SELECT Id FROM another_table WHERE Name = @fieldZ)

これは、another_table.Name が一意であると想定しています。そうでない場合は、LIMIT 句を追加するなどして、サブクエリが 1 行を返すようにする必要があります。

SET fieldZ = (SELECT Id FROM another_table WHERE Name = @fieldZ LIMIT 1)
于 2013-06-25T00:35:02.470 に答える