Главная страница
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
15-1189417946
ВременныйГость
2007-09-10 13:52
2007.10.07
Обезопасить себя от потери данных


1-1185183848
Tack
2007-07-23 13:44
2007.10.07
Проверить файл при открытии контекстного меню проводника


3-1180593182
DVM
2007-05-31 10:33
2007.10.07
Заполнить BLOB поле в таблице с помощью SQL запроса. Как?


2-1189493120
JetuS
2007-09-11 10:45
2007.10.07
Как изменить ресурсные строки в EXE-файле?


2-1189342976
lllll00
2007-09-09 17:02
2007.10.07
в чем ошибка