2014-11-08 15 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

相关问题