表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
的行,并且仍将返回table1
中reg_id=5
的所有行。关于mysql - 在mysql中的左联接查询中需要帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17300330/