2012-12-31 56 views
0

這是一個非常奇怪的問題。 我有3個表,所有關於agent_id的關鍵關係。加入條款不顯示所有結果

現在這個查詢:

select DATE_FORMAT(created_on,"%d/%m/%y") as date 
from logs 
where agent_id = "18" 
and log_status="1" 
and date_format(created_on,"%m/%y") = "12/12" 
group by YEAR(created_on), MONTH(created_on), DAY(created_on) desc 

不正是它suppoused到,它返回3行:

date 
31/12/12 
30/12/12 
26/12/12 

然而,當我同其他2個表就排除了31/12/12日期。這是查詢:

select DATE_FORMAT(l.created_on,"%d/%m/%y") as date 
from logs l 
join logs_rewards lr on l.id = lr.related_log_id 
join agents a on a.id = l.agent_id 
where l.log_status = "1" 
and DATE_FORMAT(l.created_on,"%m/%y") = '12/12' 
AND l.agent_id = '18' 
group by YEAR(l.created_on), MONTH(l.created_on), DAY(l.created_on) desc 

這將返回:

date 
30/12/12 
26/12/12 

而且我想不通爲什麼出現這種情況。任何幫助?

我試過將AND l.agent_id = '18'更改爲AND a.id = '18'但結果相同。

+1

這是因爲'logs_rewards'或'沒有相應的數據agents'表。你在這裏完成了'INNER JOIN'。如果你做了'LEFT JOIN',你會得到它。 – Sahal

+0

'logs_rewards'和'agents'中是否有關聯記錄?也許你想要一個外連接?瞭解[SQL連接](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)。 – eggyal

+0

@薩哈爾該死的,忘了。這是問題謝謝你。你可以提交答案,如果你願意,我會接受你的,否則我會接受格齊米的答案。 –

回答

0

這是因爲數據未映射到所有3個表中。

下面的查詢將工作

select DATE_FORMAT(l.created_on,"%d/%m/%y") as date 
from logs l 
left join logs_rewards lr on l.id = lr.related_log_id 
left join agents a on a.id = l.agent_id 
where l.log_status = "1" 
and DATE_FORMAT(l.created_on,"%m/%y") = '12/12' 
AND l.agent_id = '18' 
group by YEAR(l.created_on), MONTH(l.created_on), DAY(l.created_on) desc 
0

也許你想替換JOINLEFT JOIN從日誌中獲得所有結果。

+0

是的,這是問題所在 –