[英]Mysql how to join tables more than two
I have problem with my query, 我的查询有问题,
I have tables below: 我有以下表格:
CREATE TABLE IF NOT EXISTS `klik_zona` (
`kode_zona` int(10) unsigned NOT NULL,
`klik` int(10) unsigned NOT NULL,
PRIMARY KEY (`kode_zona`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `klik_zona` (`kode_zona`, `klik`) VALUES
(1, 45);
CREATE TABLE IF NOT EXISTS `tampil_zona` (
`kode_zona` int(10) unsigned NOT NULL,
`tanggal` date NOT NULL,
`tampil` int(10) unsigned NOT NULL,
PRIMARY KEY (`kode_zona`,`tanggal`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tampil_zona` (`kode_zona`, `tanggal`, `tampil`) VALUES
(1, '2014-03-16', 100),
(1, '2014-03-17', 23);
CREATE TABLE IF NOT EXISTS `zona_iklan` (
`kode_zona` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`kode_zona`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
INSERT INTO `zona_iklan` (`kode_zona`) VALUES
(1),
(2),
(3);
I have query: 我有查询:
SELECT z.kode_zona, SUM( tz.tampil ) , SUM( kz.klik )
FROM zona_iklan z
LEFT JOIN tampil_zona tz ON tz.kode_zona = z.kode_zona
LEFT JOIN klik_zona kz ON kz.kode_zona = z.kode_zona
GROUP BY z.kode_zona
but it give result: 但它给出了结果:
kode_zona SUM(tz.tampil) SUM(kz.klik)
1 123 90
2 NULL NULL
3 NULL NULL
I want get result: 我想得到结果:
kode_zona SUM(tz.tampil) SUM(kz.klik)
1 123 45
2 NULL NULL
3 NULL NULL
please help me.. how to make query so that I get result that I hope it.. 请帮助我..如何进行查询,以便获得希望的结果..
thanks, 谢谢,
In your example you join two records from tampil_zona
on to one record from zona_iklan
, which essentially causes that one record to duplicate. 在您的例子就可以结合来自两个记录
tampil_zona
上从一个记录zona_iklan
,其本质原因是一个创纪录的复制。 Then you are joining one record in klik_zona
on to both of those duplicated records, causing the doubling of results that you want to avoid. 然后,您将
klik_zona
一条记录加入到两个重复的记录上,从而导致要避免的结果加倍。
Instead, you need to aggregate the records before you join them, to ensure that you are always joining the records 1-to-1. 相反,您需要在合并记录之前对其进行汇总,以确保始终始终以一对一的方式加入记录。
SELECT
z.kode_zona, tz.tampil, kz.klik
FROM
zona_iklan AS z
LEFT JOIN
(SELECT kode_zona, SUM(tampil) AS tampil FROM tampil_zona GROUP BY kode_zona) AS tz
ON tz.kode_zona = z.kode_zona
LEFT JOIN
(SELECT kode_zona, SUM(klik) AS klik FROM klik_zona GROUP BY kode_zona) AS kz
ON kz.kode_zona = z.kode_zona
Try removing the GROUP BY
and look at the result. 尝试删除
GROUP BY
并查看结果。 You will see that there are two records with kode_zona = 1. This because there are two records in tampil_zona matching that id. 您将看到有两条记录的kode_zona =1。这是因为tampil_zona中有两条记录与该ID匹配。 You could divide by
count(*)
but that seems futile. 您可以除以
count(*)
但这似乎是徒劳的。 You probably want to think about how to modify the join. 您可能想考虑如何修改联接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.