MySQL - 从两个表中选择记录,但前提是没有重复

时间:2015-07-02 19:24:12

标签: mysql

我有两张桌子:

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

我会提供任何帮助 - 提前谢谢!

2 个答案:

答案 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

和相反的表格相同