0
我想在四張桌子上做一些計數,我正在努力做到這一點!在多個表上計算mysql具有相同的標識符
這裏是我的表腳本(4個簡單的表,相同的表)
CREATE TABLE `TableA` (
`id` int(45) NOT NULL,
`zone` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `TableA` (`id`, `zone`) VALUES
(1, 'ca'),(2, 'ca'),(3, 'fr'),(4, 'ca'),(5, 'ca'),(6, 'fr');
CREATE TABLE `TableB` (
`id` int(45) NOT NULL,
`zone` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `TableB` (`id`, `zone`) VALUES
(1, 'ca'),(2, 'it'),(3, 'de'),(4, 'ca'),(5, 'it'),(6, 'fr');
CREATE TABLE `TableC` (
`id` int(45) NOT NULL,
`zone` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `TableC` (`id`, `zone`) VALUES
(1, 'ca'),(2, 'ma'),(3, 'fr'),(4, 'pl'),(5, 'usa'),(6, 'fr');
CREATE TABLE `TableD` (
`id` int(45) NOT NULL,
`zone` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `TableD` (`id`, `zone`) VALUES
(1, 'ca'),(2, 'pl'),(3, 'it'),(4, 'pl'),(5, 'ca'),(6, 'it');
這裏是我到目前爲止已經試過
SELECT DISTINCT Zone,
TableAa,
TableBb,
TableCc,
TableDd
FROM
(
SELECT DISTINCT Ta.zone AS Zone,
COUNT( Ta.id ) AS TableAa,
COUNT( Tb.id ) AS TableBb,
COUNT( Tc.id ) AS TableCc,
COUNT( Td.id ) AS TableDd
FROM TableA Ta
LEFT JOIN TableB Tb ON Ta.zone = Tb.zone
LEFT JOIN TableC Tc ON Ta.zone = Tc.zone
LEFT JOIN TableD Td ON Ta.zone = Td.zone
GROUP BY Ta.zone
UNION
SELECT DISTINCT Tb.zone AS Zone,
COUNT( Ta.id ) AS TableAa,
COUNT( Tb.id ) AS TableBb,
COUNT( Tc.id ) AS TableCc,
COUNT( Td.id ) AS TableDd
FROM TableB Tb
LEFT JOIN TableA Ta ON Tb.zone = Ta.zone
LEFT JOIN TableC Tc ON Tb.zone = Tc.zone
LEFT JOIN TableD Td ON Tb.zone = Td.zone
GROUP BY Tb.zone
UNION
SELECT DISTINCT Tc.zone AS Zone,
COUNT( Ta.id ) AS TableAa,
COUNT( Tb.id ) AS TableBb,
COUNT( Tc.id ) AS TableCc,
COUNT( Td.id ) AS TableDd
FROM TableC Tc
LEFT JOIN TableB Tb ON Tc.zone = Tb.zone
LEFT JOIN TableA Ta ON Tc.zone = Ta.zone
LEFT JOIN TableD Td ON Tc.zone = Td.zone
GROUP BY Tc.zone
UNION
SELECT DISTINCT Td.zone AS Zone,
COUNT( Ta.id ) AS TableAa,
COUNT( Tb.id ) AS TableBb,
COUNT( Tc.id ) AS TableCc,
COUNT( Td.id ) AS TableDd
FROM TableA Td
LEFT JOIN TableB Tb ON Td.zone = Tb.zone
LEFT JOIN TableC Tc ON Td.zone = Tc.zone
LEFT JOIN TableA Ta ON Td.zone = Ta.zone
GROUP BY Td.zone
) A
ORDER BY Zone
;
我有一些成果,但語無倫次結果。
我應該有
zone | TableAa | TableBb | TableCc | TableDd
fr | 2 | 1 | 2 | 0
ca | 4 | 2 | 1 | 2
it | 0 | 2 | 0 | 2
de | 0 | 1 | 0 | 0
ma | 0 | 0 | 1 | 0
pl | 0 | 0 | 1 | 2
usa | 0 | 0 | 1 | 0
相反,我有
zone | TableAa | TableBb | TableCc | TableDd
ca | 16 | 16 | 16 | 16
ca | 32 | 32 | 32 | 32
de | 0 | 1 | 0 | 0
fr | 4 | 4 | 4 | 0
fr | 8 | 8 | 8 | 8
it | 0 | 4 | 0 | 4
ma | 0 | 0 | 1 | 0
pl | 0 | 0 | 2 | 2
usa | 0 | 0 | 1 | 0
結果是完全錯誤的,我真的不知道爲什麼!這裏是一個SQL小提琴測試:http://sqlfiddle.com/#!9/1cc0ab/3
任何幫助是必要的。
謝謝。
PS:我用mysql
男人,你是我的英雄!非常感謝 – ben