在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)。 –