mysql - 在 mysql 中的左连接查询中需要帮助

标签 mysql join

表 1:

name | map_id | reg_id 
abc  |  1     | 5
pqr  |  2     | 5
xyz  |  3     | 5

表 2:

map_id | map_name | is_deleted
 1     | map1     |   0
 2     | map2     |   0

我的 sql 查询:

SELECT *
FROM   table1 t1
       LEFT JOIN table2 t2
              ON t1.map_id = t2.map_id
WHERE  t1.reg_id = 5
       AND t2.is_deleted = 0

上面的查询所做的是阻止我在表 1 中检索带有 map_id = 3 的记录。

如果记录存在于表 2 中,我如何实现这一点以及“is_deleted 检查”。

提前致谢。

最佳答案

您需要将 is_deleted 检查移动到 JOIN:

select t1.name, t1.map_id, t1.reg_id,  -- replace select * with columns
  t2.map_name, t2.is_deleted
from table1 t1 
left join table2 t2 
  on t1.map_id = t2.map_id
  and t2.is_deleted = 0
WHERE t1.reg_id = 5;

参见 SQL Fiddle with Demo .您当前的查询导致 LEFT JOININNER JOIN 一样工作,因为您将 is_deleted 作为 WHERE 子句的一部分。如果将其移动到 JOIN,那么您将返回 table2 中具有 is_deleted=0 的行,并且您仍将返回 table1 中的所有行> 其中 reg_id=5

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

相关文章:

c# - 如何将 Case 语句添加到我的 LINQ 查询

mysql - 无法启动 WEBRick Web 服务器 - Ruby 抛出 MySQL 错误

mysql - 如何将查询更改为嵌套选择?

MySQL 对连接表列的排序非常慢(临时表)

mysql - sql 查询查找可用日期

mysql - 从表 A 中查找与数据透视表 B 另一侧的表 C 具有某些 JOINS 的记录,但不查找其他记录

php - MySQL先插入后删除

Android App从activities重写为fragments数据库报错

mysql - 如何计算 Talend on Oracle 中连接的行数

php - 三个表之间的内部连接以获取信息