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

MySQL-从两个表中选择记录,但前提是没有重复记录,mysql,Mysql,我有两张桌子: table1 #id_table1 | code1 #--------------------- # 1 | abc # 2 | abcd # 3 | abcde table2 #id_table2|code2 #-------------------- # 1 | aaa # 2 | bbb # 3 | abcde 如果要联接这两个表并获取两个表中的记录: SELECT ta

我有两张桌子:

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
以及表2.code2中的记录,这些记录不在表1.code1中

Result i need: aaa, bbb

我将感谢任何帮助-提前感谢

实际上刚刚注意到这是专门为MySQL标记的,而MySQL没有;不支持完全外部联接(如果您在另一个支持此功能的SQL系统上,您可以向下跳过以获得首选方法

因此,在MySQL中,您需要将左连接和右连接结合在一起,如下所示:

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
如果您具有完全外部联接兼容性,您将执行完全外部联接,并查找联接在您尝试联接的字段上导致空记录的情况

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
下面是一篇著名的文章,解释了如何执行不同类型的联接:

实际上相当简单:

SELECT code1
FROM table1 LEFT JOIN table2
  ON table1.code1 = table2.code2
WHERE code2 IS NULL

与另一个表相同

这只会在一个方向上起作用,不会识别表2中存在但表1中不存在的行。@MikeBrant请求得到两个单独的结果集,我注意到相同的查询应该复制并交换到另一个表中(另一方面,您的解决方案返回一个结果集)他没有明确地说他想要两个结果集,但我可以肯定地看到你是如何用这种方式来解释这个问题的。无论哪种方式,他都应该能够从我们的两个答案中得到他想要的:)我不认为这是一个重复的结果集,这与你试图在MySQL中模拟完全外部连接的用例相匹配。现在有类似的答案,但我不认为这个问题有读者已经理解什么是完全外部连接的假设。完美的答案-非常感谢!我还学到了一些关于MySQL限制的新知识:)