mysql - 只插入其他表中的唯一数据

时间:2017-02-21 14:57:13

标签: php mysql

我有2个表,我想根据条件将数据从一个表插入另一个表:

表1:

user_id,
agency_user_id,

表1的输出:

user_id   agency_user_id
330       20 
330       21
239       10
...       ..
239       10
239       12
239       9

表2:     与目前我不需要的其他一些列相同......

一旦用户登录,他就有2个下拉菜单,其中一个是我列出的user_id(不是id,而是基于id的信息),另一个是agency_user_id ......

所以问题是我不想有2次:

239 10
239 10
表2中的

......我只想要一次(独一无二)...... 这是我使用的查询,它不能正常工作:

INSERT INTO table2
(`user_id`,`agency_user_id`)
 SELECT `user_id`,`agency_user_id`
FROM table2
WHERE `user_id` AND `agency_user_id` NOT IN (
SELECT `user_id`
 FROM table1
);

现在当我检查表2中有重复的条目时...... 我知道我在那里做错了什么......不是部分......

有什么建议吗?

感谢。

编辑: 我也尝试过这个:

INSERT INTO table2
(`user_id`,`agency_user_id`)
 SELECT DISTINCT `user_id`,`agency_user_id`
FROM table2
WHERE `user_id` AND `agency_user_id` NOT IN (
SELECT `user_id`
 FROM table1
);

不工作......

表2的当前输出

  user_id    agency_user_id
   330         20             => ok
   330         21             => ok
   239         10             => ok
   239         10             => not ok
   239         12             => ok
   239         9              => ok

依旧......

3 个答案:

答案 0 :(得分:0)

我认为你要找的是DISTINCT

INSERT INTO table2
(`user_id`,`agency_user_id`)
SELECT DISTINCT `user_id`,`agency_user_id`
FROM table2
WHERE `user_id` NOT IN (
SELECT `user_id`
FROM table1
) AND `agency_user_id` NOT IN (
SELECT `user_id`
FROM table1
);

我删除了created_atupdated_at以避免重复,并修复NOT IN以适用于user_idagency_user_id

答案 1 :(得分:0)

您可以尝试使用临时表:

如下例所示:

select * from TABLE1;
+------+------+
| a    | b    |
+------+------+
|    1 | 2    |
|    3 | 4    |
|    1 | 2    |
|    4 | 5    |
+------+------+

如你所见

1 2
1 2

重复

创建临时表:

create temporary table temp1 (a text, b text, c text);

插入此内容:

insert into temp1 select a,b,count(*) from TABLE1 group by a,b;


select * from temp1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
| 1    | 2    | 2    |
| 3    | 4    | 1    |
| 4    | 5    | 1    |
+------+------+------+
3 rows in set (0.00 sec)

最后

insert into table2 (a ,b) select a,b from temp;

select * from table2;
+------+------+
| a    | b    |
+------+------+
| 1    | 2    |
| 3    | 4    |
| 4    | 5    |
+------+------+
3 rows in set (0.00 sec)

帮我一次!!!

答案 2 :(得分:0)

你应该尝试这样的事情:

INSERT INTO table2(`user_id`,`agency_user_id`)
    SELECT DISTINCT `user_id`,`agency_user_id`
    FROM table1
    WHERE `user_id` + `-` + `agency_user_id` NOT IN (SELECT `user_id` + `-` + `agency_user_id` FROM table2);

这将选择Table1中尚未包含的Table2中的不同值。

您拥有insert的方式是从user_id中提取Table2以内的所有Table1。所以,如果user_idTable2 Table1以外的{{1}}不在{{1}},您将获得重复。