JDBC 使用 UPDATE FROM 状态

Posted

技术标签:

【中文标题】JDBC 使用 UPDATE FROM 状态【英文标题】:JDBC Using an UPDATE FROM state 【发布时间】:2015-02-27 02:11:03 【问题描述】:

我正在尝试使用我拥有的另一个表中的值更新我的一个表中的记录。

查找后,我看到UPDATE FROM STATE 应该可以解决问题,但尝试后我得到了错误:

语法错误:在第 1 行第 67 列遇到“FROM”。

我的表格(相关字段):

TABLE USERS: STRING nickName FLOAT logFolwers

TABLE POSTS:STRING author FLOAT logRepub FLOAT 流行度

我的 SQL 查询:

UPDATE POSTS SET popularity = POSTS.logRepub * USERS.logFollowers 
FROM POSTS INNER JOIN USERS ON POSTS.author=USERS.nickName

我希望这是所有需要的信息。 感谢您的帮助。

编辑:尝试过:

UPDATE POSTS SET popularity= (SELECT POSTS.logRepub * USERS.logFollowers FROM POSTS INNER JOIN USERS ON POSTS.author=USERS.nickName)

得到了错误:

"标量子查询只允许返回一行。"

调用executeUpdate()时;

【问题讨论】:

您使用的是哪个 DBMS? 两张表的主键是什么? 对于用户:userName varchar(10) PRIMARY KEY,对于帖子:postID INTEGER PRIMARY KEY 昵称也是唯一的吗?如果logFollowers0 怎么办?你想添加logRepub 值吗?或者结果也应该是0 logFollowers 和 logRebpub 设置为 1 组默认值。昵称确实是独一无二的。感谢您的帮助! 【参考方案1】:

应该这样做:

UPDATE POSTS 
  SET popularity = logRepub * (SELECT u.logFollowers
                               FROM users u 
                               where u.username = posts.author);

子选不需要join,只需要一个共同相关的子选。

您说usernameusers 表的PK,但是您的示例使用列nickname。如果昵称不是唯一的,则不能用作关联子查询。

【讨论】:

以上是关于JDBC 使用 UPDATE FROM 状态的主要内容,如果未能解决你的问题,请参考以下文章

如何使用状态 UPDATE_ROLLBACK_COMPLETE 更新 CloudFormation 堆栈?

hibernate的merge和saveOrUpdate方法有啥区别

jdbc数据库连接失败 java.net.SocketException: Malformed reply from SOCKS

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 ----转----

JSP/JDBC:HTTP 状态 404 - 未找到

通量状态.update