表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中的记录存在,那么如何实现这一点以及“ISO删除检查”。
提前谢谢。

最佳答案

您需要将is_deleted复选框移动到联接:

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 JOIN的行为类似于INNER JOIN,因为您将is_deleted作为WHERE子句的一部分。如果将其移到JOIN,则将返回table2中具有is_deleted=0的行,并且仍将返回table1reg_id=5的所有行。

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

10-16 01:37