我有这个猫id - post id relation table。
+----+--------+---------+
| id | cat_id | post_id |
| | | |
| 1 | 11 | 32 |
| 2 | ... | ... |
+----+--------+---------+
我使用SELECT WHERE cat_id = 11 AND post_id = 32
然后如果找不到结果,我会INSERT
。
我可以在One中重写这两个查询吗?
答案 0 :(得分:4)
您可以这样做:
insert into cats_rel(cat_id, post_id)
select 11, 32
where not exists (select 1 from cats_rel where cat_id = 11 and post_id = 32);
编辑:
糟糕。以上情况在MySQL中不起作用,因为它缺少from
子句(但在许多其他数据库中都有效)。在任何情况下,我通常写这个将值放在子查询中,因此它们只出现在查询中一次:
insert into cats_rel(cat_id, post_id)
select toinsert.cat_id, toinsert.post_id
from (select 11 as cat_id, 32 as post_id) toinsert
where not exists (select 1
from cats_rel cr
where cr.cat_id = toinsert.cat_id and cr.post_id = toinsert.post_id
);
答案 1 :(得分:3)
您可以使用替换
REPLACE INTO 'yourtable'
SET `cat_id` = 11, `post_id` = 32;
如果记录存在,它将覆盖它,否则将被创建;
更新: 为此,您应该为这对列添加一个唯一键,而不仅仅是一个
ALTER TABLE yourtable ADD UNIQUE INDEX cat_post_unique (cat_id, post_id);
答案 2 :(得分:0)
我们可以使用MySQL的“from dual”子句:
insert into cats_rel(cat_id, post_id)
select 11, 32 from dual
where not exists (select 1 from cats_rel where cat_id = 11 and post_id = 32);