第UPDATE
一个CTE中的 updated
产生 。这意味着您都不会获得任何NULL
价值updated.id
。加入时updated
,您 一无所获 ,因此也不会INSERT
发生任何事情。
应该与NOT EXISTS
:
WITH updated AS (
UPDATE Vote_user_table v
SET positive = TRUE -- use booleann values ..
,negative = FALSE -- .. instead of quoted string literals
FROM usuario u
WHERE v.review_id = 6 -- guessing origin
AND v.user_id = u.id
AND u.username ILIKE 'aaa@aaa.com'
RETURNING v.id
)
INSERT INTO Vote_user_table (review_id, user_id, positive, negative)
SELECT 6, u.id, TRUE, FALSE
FROM usuario u
**WHERE NOT EXISTS (SELECT 1 FROM updated)**
AND u.username ILIKE 'aaa@aaa.com';
请注意,在高并发负载下出现 竞争状况的 机会仍然很小。