使用 Load Data Infile 的子查询

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)

  • 嗨,比尔,我之前尝试过,但不幸的是它不起作用。 (2认同)