Php mysql-仅插入来自其他表的唯一数据

Php mysql-仅插入来自其他表的唯一数据,php,mysql,Php,Mysql,我有两个表,我想根据以下条件将数据从一个表插入到另一个表: 表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: 有相同的加上一些其他专栏,我现在不需要 一旦用户登录,他有两个下拉菜单,在其中一个我列出的是用户id不是id而是基于id的信

我有两个表,我想根据以下条件将数据从一个表插入到另一个表:

表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: 有相同的加上一些其他专栏,我现在不需要

一旦用户登录,他有两个下拉菜单,在其中一个我列出的是用户id不是id而是基于id的信息,在另一个机构中列出的是用户id

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

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

等等

我认为你要找的是不同的:


其中我删除了created_at并更新了_at以避免重复,并修复了NOT IN以同时应用于用户id和机构用户id。

您可以尝试使用临时表:

如以下示例所示:

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)

曾经帮助过我

您可能应该尝试以下方法:

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);
这将从表1中选择不在表2中的不同值


插入的方式是从表2中提取所有不在表1中的用户id。因此,如果表2中的用户id不在表1中,则会得到重复的用户id。

不应将创建的和更新的用户id从一个表插入到另一个表中。你试过了吗?谢谢你的建议但我需要。。。是的,我有,但我仍然得到重复的条目…或尝试插入忽略。。。和主键这部分正确吗?其中用户id和机构用户id不在表1中选择用户id;您正在将代理\用户\ id与用户\ id连接起来,这在当时对一个组没有意义。DISTINCT并不总是有效的。一旦用户登录,他有2个下拉菜单-那么所有这些的HTML在哪里呢?人们如何知道这是否失败?这部分正确吗?其中用户id和机构用户id不在表1中选择用户id;您正在将代理用户id与用户id连接起来,这是不合理的。我猜您已经在不同位置创建了和/或更新了不同的用户id和代理用户id的不同条目。您需要这些吗?它们没有在您想要的输出中指定…现在我添加了更少的行,但仍然有重复的行。。。也请查收edit@Krishnakumar我什么都没有,0行受影响,0errors@Krishnakumar即使在第一次从表2=>表1更改之后,最后选择将用户id替换为机构用户id
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);