cap*_*spi 5 php mysql sql phpmyadmin
我遇到特定子查询的问题:
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)
Run Code Online (Sandbox Code Playgroud)
我基本上想要实现的目标是将文件中的字段替换为相应的 ID,该 ID 在执行查询时位于另一个表中。这可能吗?
提前谢谢大家。我已经查遍了互联网。不过到目前为止还没有运气..
哦,通过上面的查询,我得到一个错误,基本上告诉我子查询不是标量。很明显,子查询不是针对每行的插入执行,而是针对每行组合在一起的所有 fieldZ 执行(因此它返回多个 ID)
小智 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)
Run Code Online (Sandbox Code Playgroud)
这是假设 another_table.Name 是唯一的。如果没有,您需要强制子查询返回 1 行,例如通过添加 LIMIT 子句:
SET fieldZ = (SELECT Id FROM another_table WHERE Name = @fieldZ LIMIT 1)
Run Code Online (Sandbox Code Playgroud)