請幫助我理解,如何使用連接重新制作此查詢。
INSERT INTO mytable
(user_id, tag)
SELECT ?, ?
WHERE NOT EXISTS (SELECT user_id FROM mytable WHERE user_id=? AND tag=?)
我看到使用兩個不同表的類似問題,但這里我有一個表。只有當相同的條目不存在時,我才需要插入。mytable表沒有任何唯一約束,我無法更改方案。
uj5u.com熱心網友回復:
您可以將引數放入可重用的公用表運算式中:
with data (user_id, tag) as (
values (?,?)
)
INSERT INTO mytable (user_id, tag)
SELECT d.user_id, d.tag
FROM data d
WHERE NOT EXISTS (SELECT *
FROM mytable t
cross join data d
WHERE t.user_id = d.user_id
AND t.tag = d.tag)
請注意,這不會阻止同時插入相同的值。實作這一目標的唯一方法是添加唯一約束(然后您可以使用on conflict do nothing)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408974.html
標籤:
