Задать вопрос

Как из столбца таблицы составить пары без одинаковых значений?

Используя данные из таблицы городов, составьте одним запросом всевозможные пары городов так, чтобы в результате не было пар с одинаковыми названиями городов. Для решения необходимо использовать декартово произведение.

select c.city as "Город" , c1.city as "Город 2"
from city c 
cross join city c1
where c1.city_id > c.city_id

Я думал,что ответ верный,но прислали на пересдачу.
  • Вопрос задан
  • 1706 просмотров
Подписаться 5 Простой 17 комментариев
Пригласить эксперта
Ответы на вопрос 5
iMedved2009
@iMedved2009
Не люблю людей
Ну совсем тупой вариант
select * from (select 
  least(city.id, city2.id) as id1, 
  greatest(city.id, city2.id) as id2
  from city 
  join city as city2 on city.id != city2.id 
  group by   least(city.id, city2.id), greatest(city.id, city2.id) 
) as t join city as city1 on city1.id = id1 join city as city2 on city2.id = id2;


Если подумать то конечно можно проще
select 
LEAST(city.name, city1.name), GREATEST(city.name, city1.name)
from city 
inner join city as city1 on city1.id != city.id
GROUP BY LEAST(city.name, city1.name), GREATEST(city.name, city1.name);
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
С учётом неуникальности названия городов:
select DISTINCT c.city as "Город 1" , c1.city as "Город 2"
  from city c 
  cross join city c1
  where c1.city > c.city
Ответ написан
Комментировать
insighter
@insighter
-First time? - Huh? (C#, React, JS)
я бы попробовал вариант с объединением четных и нечетных строк таблицы
Ответ написан
@palatka
Задача из Нетологии.
К сожалению, проверки ДЗ у меня нет, но я решил так:
select c.city as "Город 1", c2.city as "Город 2"
from (select distinct city from city) c
cross join (select distinct city from city) c2
where c.city <> c2.city
order by "Город 1", "Город 2"
Ответ написан
Комментировать
@ILdar_777
Доброго дня всем) у меня такой вариант:

select c.city, c2.city 
from city c, city c2 
where c.city <> c2.city
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы