我有两张桌子:
table1
#id_table1 | code1
#---------------------
# 1 | abc
# 2 | abcd
# 3 | abcde
table2
#id_table2|code2
#--------------------
# 1 | aaa
# 2 | bbb
# 3 | abcde
如果我想加入这两个表并获取两个表中的记录:
SELECT table1.code1, table2.code2 FROM table1, table2
WHERE table1.code1=table2.code2
Result: abcde
这很简单,但现在我需要做相反的事情:我想要table1.code1中的记录,而不是table2.code2中的记录
Result i need: abc, abcd
来自table2.code2的记录,这些记录不在table1.code1中
Result i need: aaa, bbb
我会提供任何帮助 - 提前谢谢!
答案 0 :(得分:0)
实际上只是注意到这是专门为MySQL标记的,它不支持FULL OUTER JOIN(如果你在另一个支持这个的SQL系统上,你可以跳过下来寻找首选方法。
所以,在MySQL中你需要UNION一起左右连接如下:
SELECT
table1.code1,
table2.code2
FROM table1
LEFT JOIN table2 ON table1.code1=table2.code2
WHERE table2.code2 IS NULL
UNION
SELECT
table1.code1,
table2.code2
FROM table1
RIGHT JOIN table2 ON table1.code1=table2.code2
WHERE table1.code1 IS NULL
如果你有FULL OUTER JOIN兼容性,你将执行FULL OUTER JOIN并查找连接在你试图加入的字段上产生空记录的情况。
SELECT
table1.code1,
table2.code2
FROM table1
FULL OUTER JOIN table2 ON table1.code1=table2.code2
WHERE table1.code1 IS NULL OR table2.code2 IS NULL
以下是一篇着名的文章,解释了如何执行不同类型的联接:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
答案 1 :(得分:0)
实际上非常简单:
SELECT code1
FROM table1 LEFT JOIN table2
ON table1.code1 = table2.code2
WHERE code2 IS NULL
和相反的表格相同