在我的数据库中,我有一个名为data_countries
的表,其结构如下:
country | population | nearby_country1 | nearby_country2 | nearby_country3
当我运行以下查询时
SELECT DISTINCT data_countries.country, data_countries.population, data_countries.nearby_country1 , data_countries.nearby_country2 , data_countries.nearby_country3
FROM data_countries
WHERE data_countries.country = 'Netherlands'
我得到的结果看起来像这样
Netherlands | 16570613 | Belgium | Germany | United Kingdom
我现在想要实现的目标如下。
根据输入“荷兰”,我还想在列nearby_country1
nearby_country2
和nearby_country3
的相同结构中返回数据。
具体来说,我想调整我的查询以得到这样的输出:
Netherlands | 16570613 | Belgium | Germany | United Kingdom
Belgium | 10000000 | Netherlands | Other | Other
Germany | 10000000 | Netherlands | Other | Other
United Kingdom | 10000000 | Other | Other | Netherlands
我调查INNER JOIN
和Subselect
并尝试了一些事情,但似乎无法做到正确。
希望有人可以让我在这个方向上找到正确的方向。
由于
答案 0 :(得分:2)
呸。您的数据未规范化,因此您需要使用连接执行此操作。如果你的桌子不是很大,这是一种方法。请注意,该国家/地区本身包含在“附近”国家/地区:
select nearby.*
from data_countries c join
data_countries nearby
on c.country = 'Netherlands' and
nearby.country in (c.country, c.nearby_country1, c.nearby_country2, c.nearby_country3)
order by (nearby.country = 'Netherlands') desc;
如果您想保留订购,请将order by
更改为:
order by (nearby.country = 'Netherlands') desc,
(nearby.country = c.nearby_country1) desc,
(nearby.country = c.nearby_country2) desc,
(nearby.country = c.nearby_country3) desc
编辑:
Here是一个SQL Fiddle示例,显示它正常工作(注意这只使用SQL Server,因此我可以使用with
语法)。
规范化意味着您有一个名为NearbyCountries
的表,其中包含两个数据列。一个用于第一个国家,一个用于第二个国家。