2014-09-01 80 views
0

我有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 | 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  | 
+------+--------------+----------+ 

而且試過這個q uery但輸出錯誤,爲什麼?

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 
+0

提示:在select子句中寫入表名。 'A.Area,CB.premium_area,A.register'並嘗試沒有'Group BY' – diEcho 2014-09-01 10:18:00

+0

你嘗試過的東西不能工作。你必須得到語法錯誤。 – Jens 2014-09-01 10:21:25

回答

0

隨着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; 

DEMO

,你可以繼續以相同的順序表,並使用RIGHT JOIN

0

交換表的聯接子句中,像這樣的:

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; 
0

可以使用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;