0
私は4つのテーブルでいくつかのカウントをしようとしています、私はそれをやっている苦労している!ここで複数のテーブルでカウント同じ識別子を持つ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