MySQL LEFT JOIN - 除非包含所有列,否则为空结果

时间:2013-01-09 13:13:17

标签: mysql left-join

直到新的一年,我没有遇到任何问题所以我认为这是一个YEARWEEK问题,但我想我已经确认它不是。

我的原始陈述不再有效(返回0结果):

SELECT t1.*, t2.family 
FROM report_tables.roc_test_results as t1 
LEFT JOIN report_tables.roc_capacity_standards as t2 
ON t1.item=t2.part_number 
WHERE YEARWEEK(t1.date_created)='201301' 
    AND t1.operation='TEST' 
    AND t1.result='Passed'

但奇怪的是,这个完美无缺(返回22个结果):

    SELECT t1.*, t2.*
FROM report_tables.roc_test_results as t1 
LEFT JOIN report_tables.roc_capacity_standards as t2 
ON t1.item=t2.part_number 
WHERE YEARWEEK(t1.date_created)='201301' 
    AND t1.operation='TEST' 
    AND t1.result='Passed'

有谁知道为什么这不再有效?唯一的区别是我在第二个查询中包含了t2的所有列

1 个答案:

答案 0 :(得分:1)

不应使用Yearweek(日期),而应使用Yearweek(date,3)根据ISO标准返回年份和星期。

如果您尝试这样做:

SELECT yearweek('2013-01-01'), yearweek('2013-01-05')
201253; 201253

您会看到此间隔被视为2012年第53周的一部分,1月6日被视为2013年的第一周,而根据ISO标准,它们是2013年第一周的一部分:

SELECT yearweek('2013-01-01',3), yearweek('2013-01-06',3)
201301; 201301

我认为这可能是问题所在。另请参阅this answer类似的问题。