我试图进行以下查询
INSERT INTO 'table_1'(column_1)
SELECT DISTINCT 'column 2'
FROM other_schema.table2;
这两列的字段都设置为INT(255),但我收到以下错误:
"错误代码:1366。错误的整数值:' column2'对于列'列2'在第88163行"
我甚至去检查了各行,但字段是一个数字(确切地说是5800)。
我做了一些修补,似乎如果我试图限制选择,它总是在不正确值的上限之后立即指责该行。
答案 0 :(得分:0)
我觉得table2(column2)
不是一个数字。你可能认为这是出于某种原因,但事实并非如此。
但是,table1(column1)
是一个数字。因此,解决此问题的一种方法是使用静默转换。也就是说,将值转换为数字,但不会发生错误。 MySQL使用+ 0
执行此操作:
INSERT INTO table1(column1)
SELECT DISTINCT (column2 + 0)
FROM other_schema.table2;
我建议添加where (column2 + 0) <> 0
,假设您从未期望此列为0。
我还应该注意到你不知道insert
的88,163行是什么。这发生在distinct
之后,所以它不太可能是表中标识为88,168的行。
答案 1 :(得分:0)
您当前编写查询的方式是您尝试将INSERT
字符串添加到整数列中。当你这样做
SELECT DISTINCT 'column2'
您正在选择文字字符串'column2'
,而不是该列中的值。我会取消引用您的表和列的引用:
INSERT INTO table
SELECT DISTINCT column2 FROM ...
答案 2 :(得分:0)
如果你在'第2列'周围使用单引号,sql会将其解释为字符串,你需要删除引号,或者如果表名有空格则添加反引号
SELECT DISTINCT `column 2`