如何实现查询行数不足2行时自动插入数据的SQL语句?
合并查询与条件插入的SQL逻辑
你可以通过带条件的INSERT语句直接把判断逻辑和插入操作合并为一条SQL,无需分开执行两次操作。以下是适配MySQL的实现方案:
INSERT INTO document_category (document_id, category_id, is_main_category) SELECT 210, 181, 0 FROM dual WHERE (SELECT COUNT(*) FROM `documents` WHERE document_id = 210) < 2;
逻辑说明:
- 子查询
(SELECT COUNT(*) FROMdocumentsWHERE document_id = 210)会统计documents表中document_id=210的记录总数 - 当统计结果小于2时,
SELECT 210, 181, 0返回一行数据,触发INSERT操作将这条数据写入document_category表 - 如果统计结果大于等于2,SELECT无数据返回,INSERT不会执行任何操作
额外优化(可选):
如果需要避免向document_category插入重复记录(比如已存在document_id=210且category_id=181的条目),可以先给表添加唯一约束:
ALTER TABLE document_category ADD UNIQUE KEY idx_doc_cat (document_id, category_id);
之后改用INSERT IGNORE来跳过冲突:
INSERT IGNORE INTO document_category (document_id, category_id, is_main_category) SELECT 210, 181, 0 FROM dual WHERE (SELECT COUNT(*) FROM `documents` WHERE document_id = 210) < 2;
内容的提问来源于stack exchange,提问作者Skuld
相关产品推荐
相关产品推荐

