MySQl v5.6如何排除连接两个表后产生的不需要的/不正确的行



我有两个表,我想获取正确的数据行,但是当我在不正确的额外行之间进行连接时正在创建。我想排除它们

表T1

tbody> <<tr>
Employee_IDWork_START
111110 11月
111111月14日
111111月18日

免责声明:您应该考虑修复您的数据模型。将数据分散到两个不同的表上看起来不像是合适的设计。

对于当前的数据模型,我们可以这样处理这个问题:从第一个表中的每个开始日期开始,用子查询找到最接近的结束日期:

select t1.employee_id, t1.work_start,
(
select min(t2.work_end)
from t2 
where t2.employee_id = t1.employee_id and t2.work_end > t1.work_start
) work_end
from t1

这保证了结果集中的行数与第一个表中的行数一样多(不多也不少)。如果两个表的日期没有正确地交错,您可能会看到看起来不一致的结果(使用row_number()无法避免这种情况)。

相关内容

最新更新