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 昵称也是唯一的吗?如果logFollowers
是0
怎么办?你想添加logRepub
值吗?或者结果也应该是0
?
logFollowers 和 logRebpub 设置为 1 组默认值。昵称确实是独一无二的。感谢您的帮助!
【参考方案1】:
应该这样做:
UPDATE POSTS
SET popularity = logRepub * (SELECT u.logFollowers
FROM users u
where u.username = posts.author);
子选不需要join,只需要一个共同相关的子选。
您说username
是users
表的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等的使用 ----转----