2017-02-21 81 views
0

仅插入唯一的数据我有2个表,我想从一个表中插入数据到另一基于条件: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: 具有相同的加上我不需要在目前一些列...

一旦用户登录,他有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 

等等...

+0

您不应该将'created_at'和'updated_at'从一个表插入另一个表。 你试过DISTINCT吗? –

+0

感谢您的建议,但我需要...是的,但我仍然得到重复的条目... – Morpheus

+0

或尝试插入IGNORE(...)和主键列 – Firewizz

回答

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

其中I除去created_atupdated_at以避免重复并固定在NOT IN同时应用于user_idagency_user_id

+0

这部分是否正确? '其中USER_ID和agency_user_id NOT IN(SELECT user_id说明 FROM表1 );' 您正在连接agency_user_id与USER_ID这没有任何意义 – Krishnakumar

+0

这是不正确的,但我仍然得到了同样的重复结果... – Morpheus

+0

我的猜测是,你的'created_at'和/或'updated_at'对于具有相同'user_id'和'agency_user_id'的不同条目是不同的。你需要那些吗?他们没有在你想要的输出中指定... – wogsland

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) 

帮了我一次!

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's从Table2不是在Table1。所以如果你user_idTable2是不是在Table1你会得到重复。