作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Oracle SQL 中,您可以轻松地根据相关子查询中的 NOT EXISTS 条件进行更新。这对于根据另一个查询或 ID 列表进行更新很有用。
子查询机制在 Postgres 中是不同的...我怎样才能达到相同的目标? http://sqlfiddle.com/#!1/1dbb8/55
在 Oracle 上你会怎么做
UPDATE UserInfo a
SET a.username = 'not found'
WHERE NOT EXISTS (SELECT 'X'
FROM UserOrder b
WHERE b.userid = a.userid)
AND a.userid in (1,2,3);
Postgres NOT EXISTS 查询:有效
SELECT u.userid, u.username
FROM UserInfo AS u
WHERE NOT EXISTS
( SELECT *
FROM UserOrder AS o
WHERE o.userid = u.userid
);
Postgres NOT EXISTS 更新:不起作用
UPDATE UserInfo
SET username = 'not found'
FROM (SELECT u.userid
FROM UserInfo AS u
WHERE NOT EXISTS
( SELECT *
FROM UserOrder AS o
WHERE o.userid = u.userid
)) em
WHERE em.userid = UserInfo.userid;
最佳答案
显然,每次您“运行脚本”时,Sqlfiddle 都会重新生成数据库内容。在与更新相同的脚本中运行选择。
您从 sqlfiddle 进行的 Oracle 查询几乎可以正常工作,但您忘记为 userid 参数设置别名。正确查询:
/* How you would do it on Oracle */
UPDATE UserInfo
SET username = 'not found'
WHERE NOT EXISTS (SELECT 'X'
FROM UserOrder b
WHERE b.userid = userinfo.userid);
关于sql - Postgres : correlated subquery with NOT EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23594135/
我是一名优秀的程序员,十分优秀!