簡體   English   中英

mysql中的左聯接查詢

[英]Left join query in mysql

我對MySQL數據庫有問題。

我有兩張桌子。

doTable_1

+------+----------+
| AREA | REGISTER |
+------+----------+
| AAAA | YS       |
| BBBB | YS       |
| CCCC | YS       |
| DDDD | YS       |
| EEEE | YS       |
| FFFF | YS       |
+------+----------+

doTable_2

+--------------+------+---------------+
| PREMIUM_AREA | AREA | NAME_AREA     |
+--------------+------+---------------+
| ZZZ          | GGGG | AREA BLAWED   |
| ZZZ          | FFFF | AREA BAYWOOD  |
| ZZZ          | AAAA | AREA BILLFOLD |
| ZZZ          | BBBB | AREA BEACHED  |
| ZZZ          | CCCC | AREA BASED    |
| ZZZ          | DDDD | AREA BANED    |
| ZZZ          | EEEE | AREA BAWD     |
| ZZZ          | HHHH | AREA ARBORED  |
| ZZZ          | LLLL | AREA BLAND    |
| ZZZ          | MMMM | AREA YSENA    |
| ZZZ          | NNNN | AREA AIRSHED  |
| ZZZ          | PPPP | AREA ALLOD    |
| ZZZ          | QQQQ | AREA BEEYARD  |
+--------------+------+---------------+

我需要此輸出,將字段AREA的兩個表連接起來以提取所有行:

+------+--------------+----------+
| AREA | PREMIUM_AREA | REGISTER |
+------+--------------+----------+
| AAAA | ZZZ          | YS       |
| BBBB | ZZZ          | YS       |
| CCCC | ZZZ          | YS       |
| DDDD | ZZZ          | YS       |
| EEEE | ZZZ          | YS       |
| GGGG | ZZZ          | NULL     |
| FFFF | ZZZ          | YS       |
| HHHH | ZZZ          | NULL     |
| LLLL | ZZZ          | NULL     |
| MMMM | ZZZ          | NULL     |
| NNNN | ZZZ          | NULL     |
| PPPP | ZZZ          | NULL     |
| QQQQ | ZZZ          | NULL     |
+------+--------------+----------+

並嘗試了此查詢,但輸出錯誤,為什么?

mysql> SELECT
    AREA,
    PREMIUM_AREA,
    REGISTER
FROM
    `doTable_1` A
LEFT JOIN `doTable_2` CB ON A.AREA = CB.AREA
WHERE
    PREMIUM_AREA = 'ZZZ'
GROUP BY
    AREA
ORDER BY
    AREA ASC;
+------+--------------+----------+
| AREA | PREMIUM_AREA | REGISTER |
+------+--------------+----------+
| AAAA | ZZZ          | YS       |
| BBBB | ZZZ          | YS       |
| CCCC | ZZZ          | NULL     |
| DDDD | ZZZ          | NULL     |
| EEEE | ZZZ          | NULL     |
| GGGG | ZZZ          | NULL     |
| FFFF | ZZZ          | NULL     |
| HHHH | ZZZ          | NULL     |
| LLLL | ZZZ          | NULL     |
| MMMM | ZZZ          | NULL     |
| NNNN | ZZZ          | NULL     |
| PPPP | ZZZ          | NULL     |
| QQQQ | ZZZ          | NULL     |
+------+--------------+----------+
14 rows in set

使用LEFT JOIN ,第一個表必須是包含要返回的所有行的表,第二個表是可能缺少行的表。 因此應該是:

SELECT 
    A.AREA,
    PREMIUM_AREA,
    REGISTER
FROM
    `doTable_2` A
LEFT JOIN `doTable_1` CB ON A.AREA = CB.AREA
WHERE
    PREMIUM_AREA = 'ZZZ'
GROUP BY
    A.AREA
ORDER BY
    A.AREA ASC;

演示

或者,您可以使表保持相同順序,並使用RIGHT JOIN

交換join子句中的表,如下所示:

SELECT
    AREA,
    PREMIUM_AREA,
    REGISTER
FROM
    `doTable_2` A
LEFT JOIN `doTable_1` CB ON A.AREA = CB.AREA
WHERE
    PREMIUM_AREA = 'ZZZ'
ORDER BY
    AREA ASC;

你可以使用right join

SELECT
    AREA,
    PREMIUM_AREA,
    REGISTER
FROM
    `doTable_1` A
RIGHT JOIN `doTable_2` CB ON A.AREA = CB.AREA
WHERE
    PREMIUM_AREA = 'ZZZ'
GROUP BY
    AREA
ORDER BY
    AREA ASC;

或者如果您想使用left join交換表

SELECT 
    A.AREA,
    PREMIUM_AREA,
    REGISTER
FROM
    `doTable_2` A
LEFT JOIN `doTable_1` CB ON A.AREA = CB.AREA
WHERE
    PREMIUM_AREA = 'ZZZ'
GROUP BY
    A.AREA
ORDER BY
    A.AREA ASC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM