MySQL在同一查询中使用查询结果

时间:2014-01-18 14:53:54

标签: php mysql sql join

在我的数据库中,我有一个名为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_country2nearby_country3的相同结构中返回数据。

具体来说,我想调整我的查询以得到这样的输出:

Netherlands    | 16570613 | Belgium     | Germany | United Kingdom
Belgium        | 10000000 | Netherlands | Other   | Other  
Germany        | 10000000 | Netherlands | Other   | Other  
United Kingdom | 10000000 | Other       | Other   | Netherlands  

我调查INNER JOINSubselect并尝试了一些事情,但似乎无法做到正确。 希望有人可以让我在这个方向上找到正确的方向。

由于

1 个答案:

答案 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的表,其中包含两个数据列。一个用于第一个国家,一个用于第二个国家。