【问题标题】:join clause not showing all results连接子句未显示所有结果
【发布时间】:2012-12-31 09:41:57
【问题描述】:

这是一个非常奇怪的问题。 我有 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

完全按照它应该做的,它返回 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',但结果相同。

【问题讨论】:

  • 这是因为logs_rewardsagents 表没有对应的数据。你在这里完成了INNER JOIN。如果你这样做LEFT JOIN,你会得到它。
  • logs_rewardsagents 中是否有该日期的相关记录?也许你想要一个外部连接?了解SQL joins
  • @Sahal 该死的,忘记了。这是问题谢谢。你可以提交作为答案,如果你愿意,我会接受你的,或者我会接受 gezimi 的答案。
  • 我已经在下面给出了答案

标签: mysql sql join foreign-keys


【解决方案1】:

这是因为数据未映射到所有 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

【讨论】:

    【解决方案2】:

    也许您想将 JOIN 替换为 LEFT JOIN 以从日志中获取所有结果。

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      相关资源
      最近更新 更多