idで2つの異なるテーブルを表示します

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     |

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=26674&siteId=1