2014-01-18 12 views
0

В моей базе данных у меня есть таблица data_countries со следующей структурой:MySQL использовать результат запроса в одном запросе

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 

То, что я на самом деле хочу достичь сейчас, это follo крыло. Исходя из ввода «Нидерланды», я также хочу вернуть данные в той же колонке для столбца nearby_country1nearby_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 и попробовал некоторые вещи, но не могу показаться, чтобы получить это право. Надеюсь, кто-то может поставить меня в правильном направлении на этом.

Thanks

+0

1. См. Нормализацию – Strawberry

ответ

2

Yuck. Ваши данные не нормализованы, поэтому вам нужно сделать это с помощью соединений. Вот один из способов, если ваш стол не очень большой. Следует отметить, что сама страна входит в "близлежащих" странах:

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 

EDIT:

Here является пример SQL Fiddle, показывающий его работу (обратите внимание, что это использует SQL Server, чтобы я мог использовать синтаксис with).

Нормализованный означает, что у вас есть таблица с именем NearbyCountries с двумя столбцами данных. Один для первой страны и второй для второго.

+0

эй страны здесь нет таблицы? –

+0

Почему вы назначили select neaby * из стран? –

+0

Что вы имеете в виду с нормализованным? Я немного изменил вопрос. Все данные в моих столбцах содержат один и тот же тип данных. И все это в одном столе. поэтому – rvroo

Смежные вопросы