2014-09-01 4 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, чтобы извлечь все строки:

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

tip: записать имя таблицы в предложении select. 'A.Area, CB.premium_area, A.register' и попробуйте без' Group BY' – diEcho

+0

То, что вы пробовали, не может работать. Вы должны получить синтаксические ошибки. – Jens

ответ

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; 
Смежные вопросы