我有一个包含id
,foo_id
和bar_id
列的表格。
我想查看表格,并查看每个不同的foo_id
,如果foo_id
的行有bar_id
等于2,我想添加一个新行使用foo_id
并且bar_id
等于3,除非已存在foo_id
和bar_id
为3的行。
例如:
在:
id | foo_id | bar_id
--------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 2 | 3
5 | 3 | 2
6 | 4 | 1
后:
id | foo_id | bar_id
--------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 2 | 3
5 | 3 | 2
6 | 4 | 1
7 | 1 | 3
8 | 3 | 3
我已经尝试了这个查询,但是花了很长时间(> 20分钟)并且我不知道它是否有效:
INSERT INTO mytable (bar_id, foo_id)
SELECT 3, (@var := foo_id) AS foo_id FROM mytable
WHERE bar_id=2 AND NOT EXISTS (
SELECT 1 FROM mytable
WHERE bar_id=3 AND foo_id=@var
) LIMIT 1;
有谁知道我该怎么做?
答案 0 :(得分:1)
试试这个:
INSERT INTO mytable (bar_id, foo_id)
SELECT 3, foo_id
FROM mytable
WHERE bar_id=2 AND foo_id NOT IN (
SELECT foo_id FROM mytable WHERE bar_id=3
);