Synay:
私は、MySQLのクエリとの助けが必要。私は、データベース内のこれら2つのテーブルを持っています。
ゾーン
+----+--------+
| id | name |
+----+--------+
| 1 | ZONE 1 |
| 2 | ZONE 2 |
| 3 | ZONE 3 |
+----+--------+
地区
+----+---------+--------+-------------------+
| id | id_zone | name | number_voters |
+----+---------+--------+-------------------+
| 1 | 1 | DIST 1 | 2000 |
| 2 | 1 | DIST 2 | 3000 |
| 3 | 1 | DIST 3 | 4000 |
| 4 | 2 | DIST 4 | 3500 |
| 5 | 3 | DIST 5 | 1400 |
| 6 | 3 | DIST 6 | 3800 |
+----+---------+--------+-------------------+
私は条件を持つ2つの選択と組合作るとき
SELECT z.`name`, sum(d.`number_voters`) AS quantity
FROM zone z
JOIN district d
WHERE z.`id`= d.`id_zone`
AND z.`id`=1
GROUP BY z.`name`
UNION
SELECT d.`name`, d.`number_voters`
FROM zona z
JOIN district d
WHERE z.`id`= d.`id_zone`
AND d.`id_zone`=1;
それは私がしたいどのように私を示しています。
+--------+----------+
| name | quantity |
+--------+----------+
| ZONE 1 | 9000 |
| DIST 1 | 2000 |
| DIST 2 | 3000 |
| DIST 3 | 4000 |
+--------+----------+
ここでの問題は、クエリの両方からIDを削除することによって来る、それはこのようにそれらを示しています。
+--------+----------+
| name | quantity |
+--------+----------+
| ZONE 1 | 9000 |
| ZONE 2 | 3500 |
| ZONE 3 | 5200 |
| DIST 1 | 2000 |
| DIST 2 | 3000 |
| DIST 3 | 4000 |
| DIST 4 | 3500 |
| DIST 5 | 1400 |
| DIST 6 | 3800 |
+--------+----------+
私はあなたが私にこの方法を表示する必要があります。
+--------+----------+
| name | quantity |
+--------+----------+
| ZONE 1 | 9000 |
| DIST 1 | 2000 |
| DIST 2 | 3000 |
| DIST 3 | 4000 |
| ZONE 2 | 3500 |
| DIST 4 | 3500 |
| ZONE 3 | 5200 |
| DIST 5 | 1400 |
| DIST 6 | 3800 |
+--------+----------+
私はなぜ知らない、または行うことがit's可能な場合は、あなたの助けは非常に参考になります。
離れて渡します:
使用するtype
行は、ゾーンのIDでゾーンまたは地区とソート第一であることを示すコラムをして、タイプ別に、名前:
SELECT name, quantity
FROM (
SELECT 1 type, z.id, z.name, sum(d.number_voters) AS quantity
FROM ZONE z JOIN DISTRICT d
ON z.id= d.id_zone
GROUP BY z.id, z.name
UNION ALL
SELECT 2 type, d.id_zone, d.name, d.number_voters
FROM DISTRICT d
) t
ORDER BY id, type, name
どのゾーンにも属さない地区がある場合を除き、あなたはの第二のクエリに参加する必要はありませんUNION
。
参照のデモを。
結果:
| name | quantity |
| ------ | -------- |
| ZONE 1 | 9000 |
| DIST 1 | 2000 |
| DIST 2 | 3000 |
| DIST 3 | 4000 |
| ZONE 2 | 3500 |
| DIST 4 | 3500 |
| ZONE 3 | 5200 |
| DIST 5 | 1400 |
| DIST 6 | 3800 |