如何在mysql中组合或合并两个结果集?

时间:2016-10-12 19:29:18

标签: mysql

我有两个结果集A和B

表A看起来像这样

+------+---------+------------+
| a_id | item no | total sold |
+------+---------+------------+
|    1 |     101 |         23 |
|    2 |     102 |         34 |
|    4 |     405 |         54 |
|    5 |     506 |         65 |
|    6 |     104 |         23 |
+------+---------+------------+

表B看起来像这样

+------+---------+----------+
| b_id | item no | location |
+------+---------+----------+
|    1 |     101 | A1       |
|    2 |     102 | A2       |
|    3 |     103 | A3       |
|    4 |     104 | A4       |
+------+---------+----------+

我想实现如下输出

+------+---------+------------+----------+
| a_id | item no | total sold | location |
+------+---------+------------+----------+
|    1 |     101 |         23 | A1       |
|    2 |     102 |         34 | A2       |
|    4 |     405 |         54 | NULL     |
|    5 |     506 |         65 | NULL     |
|    6 |     104 |         23 | A4       |
+------+---------+------------+----------+

我想将“LOCATION”列附加到表A并显示表B中存在的每个项目的位置值。如果表A中的ITEM NO没有位置值,则LOCATION值具有为NULL(即EMPTY)。

由于我是初学者,我不知道如何实现它。我尝试使用UNION,但我没有写出正确的查询

2 个答案:

答案 0 :(得分:1)

您正在寻找的是加入。特别是左外连接,因此您可以从左表(TableA)获得所有结果,并且只获得右表(TableB)中匹配的结果。

指定连接时,使用ON子句告诉DB哪些字段在表之间相关:

SELECT
    a_id,
    a.itemno,
    a.totalsold,
    b.location
FROM 
    tableA
    LEFT OUTER JOIN tableB ON
        tableA.itemno = tableB.itemno

答案 1 :(得分:1)

你应该使用SELECT a.a_id, a.itemno, a.totalsold, b.location FROM tableA AS a LEFT JOIN tableB AS b ON a.itemno = b.itemno (左边因为你想在第二张表中找不到记录时得到空值)

error