MySQL对于具有列值A的每一行,添加一个具有列值B的新行(如果尚不存在)

时间:2016-08-17 16:44:32

标签: mysql

我有一个包含idfoo_idbar_id列的表格。

我想查看表格,并查看每个不同的foo_id,如果foo_id的行有bar_id等于2,我想添加一个新行使用foo_id并且bar_id等于3,除非已存在foo_idbar_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;

有谁知道我该怎么做?

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 
 );