UPDATE
trong CTE updated
sản xuất không có hàng . Điều đó có nghĩa là bạn không nhận được NULL
giá trị cho updated.id
một trong hai. Khi tham gia vào updated
, bạn không nhận được gì , vì vậy không có INSERT
cũng xảy ra.
Nên làm việc với 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 '[email protected]'
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 '[email protected]';
Hãy lưu ý rằng vẫn còn một cơ hội rất nhỏ cho một tình trạng cuộc đua chịu tải nặng đồng thời. Chi tiết trong câu hỏi có liên quan này:
Nâng cấp bằng giao dịch