Главная страница
    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
2-1189529913
Black_Tomcat
2007-09-11 20:58
2007.10.07
Через ScrollBar.Hadle изменить позицию ScrollBar.


15-1188921842
PARUS
2007-09-04 20:04
2007.10.07
PHP and GD


15-1189357149
anton773
2007-09-09 20:59
2007.10.07
почему дата отображается полностью


2-1189436199
leonidus
2007-09-10 18:56
2007.10.07
Определение высоты текста в RichEdit


2-1189490393
Washington
2007-09-11 09:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский