在MySQL上用Java做一些编程。
我有一个类似
的声明 insert into table1 (col1, col2, col3)
select col1, col2, col3 from table2
where col4 is null
on duplicate key update
col2 = values(col2), col3 = values(col3)
table1和table2都将col1作为唯一
当我将它放入Statement.executeUpdate(SQL)
时,它返回23000ish整数,但是当我只执行select * from table2 where col4 is null
时,它只返回大约10500行。
我的问题,根据java Doc,似乎java.sql.Statement.executeUpdate(String sql)
的工作原理如下
返回:(1)SQL数据操作语言的行数 (DML)语句或(2)0表示不返回任何内容的SQL语句
我没有更新行数?或者它是否会返回其他内容,例如它转化为自身的实际数量?
UPDATE ::
稍微扩展我的问题。
完整的陈述实际上是这样做的
insert into table1 (col1, col2, col3)
select table1.col1, table2.col2, table2.col3
from table1 inner join table2 on table1.col1 = table2.col1
where table1.col4 is null
on duplicate key update
col2 = values(col2), col3 = values(col3)
由于表1的内连接,每行应该是更新,不应该执行插入,我试图从Oracle 11g重新创建MERGE函数。
但我的问题仍然存在,是executeUpdate方法返回其他内容而不是更新的行数吗?