Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];

Вниз

Использование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.05 c
15-1189170770
matt
2007-09-07 17:12
2007.10.07
резюме


2-1189240396
Дядя
2007-09-08 12:33
2007.10.07
График


2-1189425402
ссссс
2007-09-10 15:56
2007.10.07
чтото не так


15-1188928095
ocean
2007-09-04 21:48
2007.10.07
Отучить ребенка от чатов


15-1189531719
TStas
2007-09-11 21:28
2007.10.07
Как же бороться с брандмауэром?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский