Mysql 如何调试:子查询返回超过1行

Mysql 如何调试:子查询返回超过1行,mysql,Mysql,我正在将CSV数据加载到mysql中,并将一列中的值替换为另一个现有表中相应的值 我使用一个子查询来实现这一点,该子查询应该总是返回一个值,但结果表明,该表中引用的列不是唯一的。并且在引用列上有重复的值会使子查询返回多个值,这是可以理解的 是否有必要告诉MySql,在加载faze的哪一行触发了这个错误时,要更具表现力?或者调试这个问题的任何方法 我想在当前表中找到引用具有重复列的行的行,这样我就能够手动检查每个重复行,以确保引用第一个表中的正确数据 示例SQL LOAD DATA LOCAL I

我正在将CSV数据加载到mysql中,并将一列中的值替换为另一个现有表中相应的值

我使用一个子查询来实现这一点,该子查询应该总是返回一个值,但结果表明,该表中引用的列不是唯一的。并且在引用列上有重复的值会使子查询返回多个值,这是可以理解的

是否有必要告诉MySql,在加载faze的哪一行触发了这个错误时,要更具表现力?或者调试这个问题的任何方法

我想在当前表中找到引用具有重复列的行的行,这样我就能够手动检查每个重复行,以确保引用第一个表中的正确数据

示例SQL

LOAD DATA
LOCAL INFILE 'file.csv'
REPLACE INTO
TABLE `db`.`table`
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
#ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
 @old_value
)
SET
`column` = (
    SELECT new_column from `db`.`other_table`
    where old_column = @old_value
);

我建议只执行
LOAD DATA
语句,然后执行单独的真正更新以映射值:

UPDATE `db`.`table` t1
INNER JOIN `db`.`other_table` t2
    ON t1.`column` = t2.old_column
SET t1.`column` = t2.new_value;
是否有必要告诉MySql,在加载faze的哪一行触发了这个错误时,要更具表现力

据我所知没有

或者调试这个问题的任何方法

查看添加到“db.table”的最后一条记录,在数据文件中找到它。导致问题的记录是下一条记录

但这实际上并不能解决您的问题-显然您没有将db.other_table.old_列定义为唯一的,并且插入触发器不会处理多个记录


由于我们对您的数据模型没有更多的了解,我们无法真正建议您需要修复其中的哪一个-但是这里有几个关于如何在MySQL数据库中查找重复项的答案。

您想确保子查询不会返回多个结果,还是要查找重复项。在我看来,你是在问一个问题,期待着另一个问题的答案。@marekful更新了我对答案的期望。谢谢你,这个问题只是简单的重复检测。关于这个话题有很多问题。你试过其中任何一种吗?我承认这种方法有它的优点。唯一的问题是,列本身已经更改了类型,并被拆分为两个,以便具有多态性。此外,这也有点离题。将查询放入
加载数据
语句实际上比我建议的更离题。建议的答案没有解决重复的问题issue@AbderrahmaneTAHRIJOUTI如果您可以更新您的问题并显示数据,以明确重复的内容,然后我也可以给你一个更新的查询。