从多个表中选择并左连接到一个表

时间:2014-06-12 04:55:06

标签: mysql sql

任何人都可以帮我解决这个问题吗?

当我只加入2张桌子时。它工作正常。

enter image description here

但是当我试图从多个表中选择时。它不起作用。这是不工作代码的例子

SELECT ca.cdate as tarikh, sum(transaction.amount) as totalamount 
FROM agent ag, town tw, calendar ca 
LEFT JOIN transaction ON ca.cdate =  DATE_FORMAT(transaction.created_at, '%Y-%m-%d') 
WHERE ca.cdate >= '2014-06-01' AND ca.cdate <= '2014-06-11' 
AND transaction.agent_id = ag.id 
AND ag.town_id = tw.id 
AND tw.state_id = 7;

结果是

enter image description here

添加组后
SELECT ca.cdate as tarikh, sum(transaction.amount) as totalamount 
FROM agent ag, town tw, calendar ca 
LEFT JOIN transaction ON ca.cdate =  DATE_FORMAT(transaction.created_at, '%Y-%m-%d') 
WHERE ca.cdate >= '2014-06-01' AND ca.cdate <= '2014-06-11' 
AND transaction.agent_id = ag.id 
AND ag.town_id = tw.id 
AND tw.state_id = 7
GROUP BY
ca.cdate;

enter image description here

尝试Ambrish的查询建议

SELECT ca.cdate as tarikh, sum(transaction.amount) as totalamount 
FROM calendar ca 
LEFT JOIN transaction ON ca.cdate = DATE_FORMAT(transaction.created_at, '%Y-%m-%d') 
LEFT JOIN agent ag on transaction.agent_id = ag.id 
LEFT JOIN town tw on ag.town_id = tw.id 
WHERE ca.cdate >= '2014-06-01' 
AND ca.cdate <= '2014-06-11'
AND tw.state_id = 7;

结果是 enter image description here

Ambrish的第二个

SELECT ca.cdate as tarikh, sum(transaction.amount) as totalamount 
FROM calendar ca 
LEFT JOIN transaction ON ca.cdate =  DATE_FORMAT(transaction.created_at, '%Y-%m-%d') 
LEFT JOIN agent ag on transaction.agent_id = ag.id
LEFT JOIN town tw on ag.town_id = tw.id 
WHERE ca.cdate >= '2014-06-01' AND ca.cdate <= '2014-06-11' 
AND tw.state_id = 7
group by ca.cdate;

结果是

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

SELECT ca.cdate as tarikh, sum(transaction.amount) as totalamount 
FROM calendar ca 
LEFT JOIN transaction ON ca.cdate =  DATE_FORMAT(transaction.created_at, '%Y-%m-%d') 
LEFT JOIN agent ag on transaction.agent_id = ag.id
LEFT JOIN town tw ag.town_id = tw.id 
WHERE ca.cdate >= '2014-06-01' AND ca.cdate <= '2014-06-11' 
AND tw.state_id = 7
group by ca.cdate;

如果没有返回结果,则可能没有匹配的记录。因此,请尝试不带(或子集)WHERE子句的查询。或者具有不同值的查询。

答案 1 :(得分:0)

SELECT
calendar.cdate,
sum(transaction.amount)
FROM
calendar
LEFT JOIN
(
    select transaction.amount, transaction.created_at from transaction, agent, town
    where
    transaction.agent_id = agent.id
    and agent.town_id = town.id
    and town.state_id = 14
)
transaction
ON calendar.cdate = DATE_FORMAT(transaction.created_at, "%Y-%m-%d") 
WHERE
calendar.cdate >= '2014-06-01' and calendar.cdate <= '2014-06-11'
GROUP BY
calendar.cdate;

最后,我设法通过子查询找到答案。谢谢你的帮助..

enter image description here