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,该 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 是唯一的。如果没有,您需要强制子查询返回 1 行,例如通过添加 LIMIT 子句:

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