【发布时间】:2021-03-28 08:28:23
【问题描述】:
我有两个没有主键的表。两个表的列数相同,它们看起来像这样:
| Table_1 | | Table_2 |
+---+---+---+---+ +---+---+---+---+
| A | B | C | D | | A | B | C | D |
| 1 | 1 | 1 | 1 | | 2 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 | | 2 | 2 | 2 | 2 |
+---+---+---+---+ +---+---+---+---+
我想将 Table_1 中的“A”列与 Table_2 中的“A”列进行比较并显示差异。 这是我当前使用的查询:
SELECT t1.A, t1.B, t1.C, t1.D
FROM Table_1 t1
LEFT JOIN Table_2 t2
ON t1.A = t2.A
WHERE t2.A IS NULL
UNION ALL
SELECT t2.A, t2.B, t2.C, t2.D
FROM Table_2 t2
LEFT JOIN Table_1 t1
ON t2.A = t1.A
WHERE t1.A IS NULL
这是我从查询中得到的结果:
| Result |
+---+---+---+---+
| A | B | C | D |
+---+---+---+---+
| 1 | 1 | 1 | 1 |
+---+---+---+---+
| 2 | 1 | 1 | 1 |
+---+---+---+---+
我想要的结果是这样的:
| Result |
+----+----+----+----+----+----+----+----+
|t1.A|t2.A|t1.B|t2.B|t1.C|t2.C|t1.D|t2.D|
+----+----+----+----+----+----+----+----+
| 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 |
+----+----+----+----+----+----+----+----+
【问题讨论】:
-
您在查询中只选择了 4 列,您希望如何在结果中获得 8 列?
-
如果要将它们加入一行,加入条件是什么?
-
在您的示例中,这很简单——每个表中只有一个不同的行,您可以将它们连接起来。但是对于存在多种差异的更一般的情况呢?如何将它们组合起来以获得您想要的结果。
-
有两个没有主键的表。在这两个表中,A 列应该具有相同的值。 B、C 和 D 列可能有不匹配或匹配的值。要求是仅从 A 列中获取不匹配的值并将它们一起显示在一行中。类似于 Table_1 中的 A 列是预期结果,Table_2 中的 A 列是实际结果。我上面使用的查询在两行中显示了与表的差异,目的是将它们放在一行中,就像上面所需的结果一样。
-
如果所有行都不匹配怎么办?您如何知道在结果的同一行中要配对哪些?
标签: mysql sql comparison