mysql - 带有 MySQL LEFT JOIN 的 WHERE 子句

标签 mysql sql join left-join where-clause

我在构建 LEFT JOIN 查询以过滤掉特定数据时遇到问题。

表A

+-----------------+-------------+
| name (UNIQUE)   | description |
+-----------------+-------------+
| test_1          | desc_1      |
| test_2          | desc_2      |
| test_3          | desc_3      |
| test_4          | desc_4      |
+-----------------+-------------+

表B

+--------+-------+
| name   | data  |
+--------+-------+
| test_1 | val_1 |
| test_2 | val_1 |
| test_1 | val_2 |
| test_1 | val_3 |
+--------+-------+

使用以下查询我得到以下结果:

SELECT tableA.name, tableA.description tableB.data
FROM tableA 
LEFT JOIN tableB
ON tableB.name=tableA.name
WHERE tableB.data='val_1'

结果:

+--------+-------+-------------+
| name   | data  | description |
+--------+-------+-------------+
| test_1 | val_1 | desc_1      |
| test_2 | val_1 | desc_2      |
+--------+-------+-------------+

这是我正在寻找的结果:

+--------+-------+-------------+
| name   | data  | description |
+--------+-------+-------------+
| test_1 | val_1 | desc_1      |
| test_2 | val_1 | desc_2      |
| test_3 | NULL  | desc_1      |
| test_4 | NULL  | desc_2      |
+--------+-------+-------------+

是否可以构建一个像那样进行过滤的查询?

最佳答案

因为您在 WHERE 子句中对 TableB 进行了筛选,所以您从最终输出中删除了 TableB.data 列中具有“val_1”的所有行。如果您将条件作为 LEFT JOIN 的一部分,您将过滤来自 TableB 的记录,但仍会获得来自 TableA 的所有记录。

您的查询将如下所示:

SELECT tableA.name, tableA.description, tableB.data
FROM tableA 
LEFT JOIN tableB
ON tableB.name=tableA.name
AND tableB.data='val_1'

这将输出:

NAME DESCRIPTION DATA
test_1 desc_1 val_1 
test_2 desc_2 val_1 
test_3 desc_3 (null) 
test_4 desc_4 (null) 

您描述的输出,以及组合:

test_3 desc_1 (null)
test_4 desc_2 (null)

似乎不是该查询的合理输出,因为该数据在表中不可用,或者我遗漏了一些信息。

关于mysql - 带有 MySQL LEFT JOIN 的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28598270/

相关文章:

php - PHP/MYSQL 中的 MySQL 连接和 ORDER BY

php - 按最新(最近)相关模型排序 [Laravel]

mysql - 数据库查询返回条件 1=true 单独或条件 2=true 单独的记录,但不返回条件 1 和条件 2=true 共同时的记录

php - 如何使用 PHP 将 MySQL 数据行放在适当的标题下?

php - SQL 连接问题返回 NULL 值

sql - 哪些索引通过四个联接来优化此查询?

mysql - 通过 LEFT JOIN 优化 SQL 子查询

java - 线程从生成线程继承锁

elasticsearch - 在 Elasticsearch 中组合(独立)索引

mysql - SQL如何计算每月有x笔交易的信用卡数量