Текущий архив: 2007.10.07;
Скачать: CL | DM;
Вниз
Использование DISTINCT в LocalSQL Найти похожие ветки
← →
tarkus (2007-05-29 23:06) [0]Здравствуйте!
Нужно вывести записи, так чтобы в одном из полей (Number) не было повторов.
SELECT DISTINCT Number FROM table ...
работает, но выводит один столбец, а мне нужны и другие.
Можно ли это как-то сделать?
← →
Loginov Dmitry © (2007-05-29 23:38) [1]> Можно ли это как-то сделать?
Можно
← →
tarkus (2007-05-29 23:46) [2]а как, если не секрет?
← →
Loginov Dmitry © (2007-05-30 00:02) [3]> а как, если не секрет?
Имел ввиду, что можно вывести и другие поля.
DISTINCT просто запрещает выборку двух идентичных строк.
← →
tarkus (2007-05-30 00:30) [4]Это понятно,
SELECT DISTINCT A ... выводит столбец А с уникальными значениями
SELECT DISTINCT A,B,C ... выводит столбцы А,B и C с уникальной совокупностью значений в каждой строке, т.е. в А значения могут повторяться
хотелось бы получить столбцы А,B и C с уникальными значениями именно в А, а не совокупности А,B и C
← →
Германн © (2007-05-30 00:42) [5]
> хотелось бы получить столбцы А,B и C с уникальными значениями
> именно в А, а не совокупности А,B и C
>
Таблица:
A B C
1 2 3
1 4 5
1 6 7
Вопрос: Какую из трёх строк запрос должен выбрать? И по какому критерию?
← →
tarkus (2007-05-30 00:59) [6]ID A B C
1 1 суп овощной супы
2 1 овощной суп супы
3 2 компот яблочный напитки
4 2 яблочный компот напитки
меня бы устроила любая пара (1 и 3) или (1 и 4) или (2 и 3) или (2 и 4)
← →
Германн © (2007-05-30 01:15) [7]
> tarkus (30.05.07 00:59) [6]
>
> ID A B C
> 1 1 суп овощной супы
> 2 1 овощной суп супы
> 3 2 компот яблочный напитки
> 4 2 яблочный компот напитки
>
> меня бы устроила любая пара (1 и 3) или (1 и 4) или (2
> и 3) или (2 и 4)
>
Тебя бы может и устроила, но вот SQL имхо требует точных критерий для выборки.
Имхо такие проблемы решаются не фомировкой запроса, а установкой индекса по полю А, чтобы не позволять создавать в таблице дубли.. Хотя я и понимаю, что пример в [6] выдуман "навскидку".
← →
tarkus (2007-05-30 01:35) [8]Пример очень близок к реальной задаче, то что в поле А изначально есть дубли - изменить нельзя, таковы данные
Может есть какое-то изящное решение моей задачи с помощью SQL, без тупого перебора?
← →
ЮЮ © (2007-05-30 04:37) [9]SELECT * FROM table WHERE ID IN
(SELECT MIN (ID) FROM table GROUP BY A)
← →
Loginov Dmitry © (2007-05-30 08:34) [10]Вложенный селект для парадокса - это жесть ))
← →
Sergey13 © (2007-05-30 08:41) [11]> [10] Loginov Dmitry © (30.05.07 08:34)
А что тут жестяного? Это же не select from select.
← →
ЮЮ © (2007-05-30 09:00) [12]Если данных в таблице много и IN + GROUP BY тяжеловат, можно и так
SELECT t1.*
FROM
table t1
LEFT JOIN table t2 ON (t1.A = t2.A) AND (t1.Id < t2.Id)
WHERE
t2.Id IS NULL
тогда в выборку попадут записи с наибольшим Id в группе по A
← →
Anatoly Podgoretsky © (2007-05-30 09:59) [13]> Loginov Dmitry (30.05.2007 08:34:10) [10]
Учим генотип, это классический пример из справки
← →
tarkus (2007-05-30 11:08) [14]> ЮЮ Спасибо огромное!
← →
Jan1 (2007-05-30 12:42) [15]
> SELECT t1.*
> FROM
> table t1
> LEFT JOIN table t2 ON (t1.A = t2.A) AND (t1.Id < t2.Id)
> WHERE
> t2.Id IS NULL
вообще-то надо not t2.Id IS NULL
Ну и я бы заюзал мой любимый exists :)
SELECT t1.*
FROM table as t1
WHERE exists(select * from table as t2
where (t1.A = t2.A) AND (t1.Id < t2.Id))
← →
Jan1 © (2007-05-30 12:43) [16]
> вообще-то надо not t2.Id IS NULL
сори, автору это несущественно :)
Страницы: 1 вся ветка
Текущий архив: 2007.10.07;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.041 c