mysql - mysql中的左连接查询

标签 mysql

我的 MySQL 数据库有问题。

我有两张 table 。

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;

DEMO

或者您可以保持表的顺序相同,并使用RIGHT JOIN

关于mysql - mysql中的左连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25603528/

相关文章:

php - 关于 unix 时间戳

java - 在 hibernate 中打开新 session 会取消表行

php - 搜索MySQL数据库中的多个表

php - CakePHP:Mysql 在多个列上搜索多个查询

mysql - 计算独特客户的累积量

mysql - 在 MySQL 中声明变量语法无效?

PHP 正则表达式帮助

Mysql 'greater than(>)'查询总是返回0

php - Symfony/PHP - 存储单个值的最佳方式

php检查用户名是否存在于数据库中