2013-01-09 92 views
0

我曾與這個沒有問題,直到新的一年,所以我認爲這是一個問題YEARWEEK,但我想我已經證實,事實並非如此。MySQL的左連接 - 除非所有列空的結果包括

我原來的聲明,不再工作(返回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的所有列在第二個查詢

+0

嘗試改變列的順序選擇列表像t2.family,T1。* – vidyadhar

+0

@vidyadhar我想你的建議,但不幸的是,這並沒有幫助,但感謝! – Geoff

+0

你可以在sqlfiddle中重現嗎? –

回答

1

而不是使用Yearweek(日期),您應該使用Yearweek(日期3),根據ISO標準返回年份和星期。

如果你試試這個:

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

,你會看到,這個間隔被認爲是一週的2012 53的一部分,和一月六日根據而被認爲是2013年第一週,到ISO標準,他們是2013年第一週的一部分:

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

我認爲這可能是問題所在。請參閱this answer也有類似的問題。