Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выборка первых записей(не дублирующихся обратным значением)

69K
23 марта 2011 года
CasperReduct
1 / / 23.03.2011
Добрый всем день.
Вот мучаюсь с таким вопросом, решил обратится к великим гуру sql )
Есть таблица test с полями a и b и записями
test
a | b
1 2
2 1
3 1
1 3
2 4
Нужно выбрать все уникальные, не повторяющиеся записи. Запись (1,2 и 2,1), (3,1 и 1,3) является дублем.
В результате должно получится:
test
a | b
1 2
3 1
2 4
Что посоветуете?
8.2K
23 марта 2011 года
Ora-cool
211 / / 20.09.2007
 
Код:
select distinct * from test t
where not exists
(select 1
  from test t1
  where (t1.a = t.a and t1.b = t.b or t1.b = t.a and t1.a = t.b) and t1.a < t.a
)
10
23 марта 2011 года
Freeman
3.2K / / 06.03.2004
Играем в Тома Кайта. :) То же, но одной строкой:
 
Код:
WITH mytab AS (
  SELECT 1 a, 2 b FROM dual UNION ALL
  SELECT 2, 1 FROM dual UNION ALL
  SELECT 3, 1 FROM dual UNION ALL
  SELECT 1, 3 FROM dual UNION ALL
  SELECT 2, 4 FROM dual
)
SELECT DISTINCT least(a, b) a, greatest(a, b) b FROM mytab;

Вместо конструкции with, эмулирующей таблицу, подставляем реальную таблицу (mytab).
8.2K
23 марта 2011 года
Ora-cool
211 / / 20.09.2007
Да, так гораздо элегантнее. Вопрос только, совместим ли этот вариант с СУБД автора топика)
10
24 марта 2011 года
Freeman
3.2K / / 06.03.2004
Помимо Oracle, должно работать в PostgreSQL и MySQL.
70K
26 марта 2011 года
AmKad
2 / / 26.03.2011
При желании можно расписать greatest и least через case.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог