[英]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.