2017-02-21 48 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你會得到重複。