Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.02 c
4-1175768274
axx
2007-04-05 14:17
2007.10.07
Гуру помогите плз. с хуком


3-1180925040
Slider007
2007-06-04 06:44
2007.10.07
Даты в хранимых процедурах (FireBird 1.5)


15-1189495429
BOA_KAA
2007-09-11 11:23
2007.10.07
Как сделать это быстрее?


6-1170350365
Vitaliy U.S.
2007-02-01 20:19
2007.10.07
Интернет серфинг и TWebBrowser


4-1175969967
AGGRESSOR
2007-04-07 22:19
2007.10.07
GUI (redirect output from console application)