2014-11-08 33 views
0

基本上我試圖建立一個表(我們稱之爲table3),它只有來自table1的記錄有計數0,1,或根本不出現在表2中。表1和表3在數據庫1中,而表2在數據庫2中。MySQL:如果table1中的記錄在表2中的計數爲0或1,則添加到table3

這是最接近我可以得到這個工作。

INSERT INTO database1.table3 (col1, col2, ...) 
SELECT t1.col1, t1.col2, ... 
FROM database1.table1 AS t1 
LEFT JOIN database2.table2 AS t2 ON t1.columnToMatch = t2.columnToMatch 
WHERE (t2.count < 2); 

TLDR:我希望table1中沒有出現在table2中的所有內容都被添加到table3中。如果table1中的記錄出現在表2我只想把它列入表3,如果table2.count是0或1

謝謝

回答

0

歡迎SO。

你正在尋找一個LEFT EXCLUDING JOIN - see here

table1獲得的所有記錄不會出現在table2

SELECT table1.* 
FROM table1 
LEFT JOIN table2 
ON table1.columnToMatch = table2.columnToMatch 
WHERE table2.columnToMatch IS NULL 

之後獲得以計數爲0或1的所有matchting記錄:

SELECT table1.* 
FROM database1.table1 AS t1 
INNER JOIN database2.table2 
ON table1.columnToMatch = table2.columnToMatch 
WHERE table2.count IN (0, 1) 

然後,您可以將兩個結果附加到UNION ALL並將wh OLE一堆新表:

CREATE TABLE table3 
SELECT ... FROM ... 
UNION ALL 
SELECT ... FROM ... 
+0

ON table1.columnToMatch = table2.columnToMatch WHERE table2.columnToMatch IS NULL 我很困惑。這不會有一場比賽嗎? ON部分永遠不會評估爲真,對嗎? – 2014-11-09 01:46:02

+0

'LEFT JOIN'會給你'table1'中的所有記錄,無論他們在另一個表中是否有吊墜。 'ON'部分標識匹配,但也會給你非匹配記錄(來自第一個表)。運行沒有WHERE部分的第一個查詢來查看這裏發生了什麼。看看[這個鏈接](http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins),因爲不同的連接類型在這裏描述得非常好。 – Benvorth 2014-11-09 08:40:06

相關問題