具有加载数据文件的子查询


Subqueries with Load Data Infile

我有一个特定子查询的问题:

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,该ID在另一个表中非常漂亮。这可能吗?

提前感谢一堆。我在网上找遍了。到目前为止运气还不太好。

哦,使用上面的查询,我得到一个错误,基本上告诉我子查询不是标量。很明显,子查询不是为每一行的插入执行,而是为每一行的所有fieldZ组合在一起执行(因此它返回多个ID)

要在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。名称是唯一的。如果不是,则需要强制子查询返回1行,例如通过添加LIMIT子句:

SET fieldZ = (SELECT Id FROM another_table WHERE Name = @fieldZ LIMIT 1)