如何通过关联查询仅向main.item_vendor插入不存在的记录?
实现仅插入不存在的记录到
main.item_vendor表 你可以通过以下两种常用SQL写法,结合原有查询逻辑,实现仅插入200000699这条不存在的记录:
方法一:使用NOT EXISTS子查询
这种写法直接检查目标item_id是否已存在于关联后的记录中,仅当不存在时执行插入:
INSERT INTO "main"."item_vendor" ("item_id", "vendor_id", audit_by, currency_id ) SELECT '200000699', ?, ?, ? WHERE NOT EXISTS ( SELECT 1 FROM main.item_vendor JOIN main.item ON item.id = main.item_vendor.item_id WHERE "main"."item"."id" = '200000699' );
逻辑说明:子查询会验证200000699是否在关联后的有效记录里,只有子查询返回空(即无匹配)时,外层的SELECT才会生成待插入数据,触发插入操作。
方法二:使用LEFT JOIN + IS NULL过滤
通过左关联筛选出未匹配的目标item_id,再执行插入:
INSERT INTO "main"."item_vendor" ("item_id", "vendor_id", audit_by, currency_id ) SELECT target.item_id, ?, ?, ? FROM (SELECT '200000699' AS item_id) AS target LEFT JOIN ( SELECT main.item_vendor.item_id FROM main.item_vendor JOIN main.item ON item.id = main.item_vendor.item_id ) AS existing ON target.item_id = existing.item_id WHERE existing.item_id IS NULL;
逻辑说明:先构造包含目标item_id的临时表,再和原有查询得到的已存在记录左关联,最后仅保留无匹配的行(existing.item_id IS NULL)进行插入。
注意:将语句中的
?替换为实际需要插入的vendor_id、audit_by、currency_id对应值即可。
内容的提问来源于stack exchange,提问作者rosed
相关产品推荐
相关产品推荐

