【发布时间】:2010-11-30 17:39:34
【问题描述】:
给定的数据看起来与此类似:
+---------+-----------+----------+
| country | city | district |
+---------+-----------+----------+
| Japan | Tokyo | 1 |
| Japan | Tokyo | 1 |
| Japan | Tokyo | 2 |
| China | Shanghai | A |
| China | Shanghai | A |
| China | Shanghai | A |
| China | Beijing | X |
| China | Beijing | Y |
| China | Beijing | Z |
| India | Mumbai | 123 |
| India | Mumbai | 123 |
| India | Mumbai | 123 |
| India | New Delhi | 321 |
| India | New Delhi | 321 |
| India | New Delhi | 321 |
+---------+-----------+----------+
我知道我可以通过以下方式直观地获取数据:
SELECT * from that_table
GROUP BY country, city, district
我会得到:
+---------+-----------+----------+
| country | city | district |
+---------+-----------+----------+
| Japan | Tokyo | 1 |
| Japan | Tokyo | 2 |
| China | Shanghai | A |
| China | Beijing | X |
| China | Beijing | Y |
| China | Beijing | Z |
| India | Mumbai | 123 |
| India | New Delhi | 321 |
+---------+-----------+----------+
我可以看到只有 Japan/Tokyo 和 China/Beijing 有多个 District 值。但是,我有大量数据源,我想用 SQL 来做。
如何形成 SQL 查询以获取具有多个地区的所有国家/城市组合?
我想要实现的输出是:
+---------+-----------+----------+
| country | city | district |
+---------+-----------+----------+
| Japan | Tokyo | 1 |
| Japan | Tokyo | 2 |
| China | Beijing | X |
| China | Beijing | Y |
| China | Beijing | Z |
+---------+-----------+----------+
【问题讨论】:
-
为什么源数据中有这么多重复记录?说三遍(例如
)并不能使它变得更真实。 -
在您的情况下,选择 * 非常糟糕,尤其是使用 group by。我很少使用 select *,我只用它来查询表的信息,从不在实际代码中。
-
我无法控制源数据。数据来自我只有只读权限的旧应用程序的数据库。