我遇到特定子查询的问题:
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)
答案 0 :(得分:0)
要在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)