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

标签 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

我现在真正想要实现的目标如下。 基于输入“Netherlands”,我还想以相同结构返回 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并尝试了一些东西,但似乎无法做到正确。 希望有人能让我在这方面找到正确的方向。

谢谢

最佳答案

恶心。您的数据未标准化,因此您需要通过联接来执行此操作。如果您的 table 不是很大,这是一种方法。请注意,该国家/地区本身包含在“附近”国家/地区中:

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

关于php - MySQL 在同一查询中使用查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205688/

相关文章:

PHP函数获取数组的前5个值

PHP 从数据库表中下载特定行

mysql - 您可以将 Okta 与 mysql 一起使用吗?

android - SQLite:删除大量行的有效方法

python - pyodbc 是否支持任何形式的命名参数?

PHP/SQL 创建日期戳并将其插入数据库

php - MySql 随机化最后 10 行

php - MySQL OR 在查询中

mysql - 可以在首选项 Pane 中启动 mysql 服务器,但无法在终端上启动它..在 MAC 上

sql - 为什么这个 Join-Update 查询会更新所有值?