在Oracle SQL中,您可以轻松地根据相关子查询中的NOT EXISTS条件执行更新。这对基于另一个查询或ID列表进行更新很有用。Postgres:与NOT EXISTS相关的子查询
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;
所以你想更新左反抗连接的左侧?在Pg中,您可以这样做,但不幸的是,它需要在左侧进行自连接,例如, 'update t1 ... from t1 a left outer join ... on ... where t.id = t1.id',因为除了'inner join'之外不支持任何内容(impicit,via'update ...从')更新目标表。 –
给定的解决方案工作。考虑这[更新的小提琴](http://sqlfiddle.com/#!1/1dbb8/75)。 –