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

Вниз

DISTINCT и более одного поля для выборки   Найти похожие ветки 

 
alex-ran   (2002-08-23 13:28) [0]

Уважаемые мастера! Не подскажите ли способ решения следующей проблемы: В таблице клиентов есть поля: ID-идентификационный код, Name-имя клиента. Причем хотя поле ID уникально, в качестве ключевого поля выбрано Name. Т.е. частенько встречается:
ID Name
12345678 Рога и копыта ООО
12345678 ООО "Рога и копыта"
Необходимо составить запрос возвращающий неповторяющийся ID и совершенно не важно с каким именно Name. Пробовал по-всякому, не могу догнать :(
Зараннее спасибо всем.


 
Balu   (2002-08-23 13:37) [1]

Попробуй так:

SELECT * FROM YourTable
WHERE ID IN (SELECT DISTINCT ID FROM YourTable)


 
Johnmen   (2002-08-23 13:38) [2]

А в чем затруднения-то...
select distinct id from ...


 
alex-ran   (2002-08-23 13:50) [3]

>Balu ©
Это первое что я попробовал :), но возвращаются все записи, а мне надо только одну, причем любую из примера выше.
>Johnmen ©
А мне еще и поле Name надо, потому как покажите мне человека который помнит клиентов не по имени а по его коду :)


 
RDA   (2002-08-23 14:12) [4]

Причем хотя поле ID уникально, в качестве ключевого поля выбрано Name. Т.е. частенько встречается:
ID Name
12345678 Рога и копыта ООО
12345678 ООО "Рога и копыта"

Где же оно уникально 12345678=12345678.


 
RDA   (2002-08-23 14:15) [5]

Да и вообще нельзя строить уникальный индекс по имени конторы, никогда не будешь застрахован от появления дубликата. Даже если испотльзуют Имя, Отчество, Фамилию человека то для построения уникального индекса не используют составной индекс по этим трем полям, а обязательно включают что-то еще - например дата рождения.


 
Val   (2002-08-23 14:21) [6]

>alex-ran © (23.08.02 13:50)
..А мне еще и поле Name надо..
ну уж.., вы почитали бы о SQL чего-нибудь...
надо еще name - выбирайте и name, в чем проблема?


 
Shaman_Naydak   (2002-08-23 14:34) [7]

SELECT ID, Min(Name)
FROM TestTable
GROUP BY ID

Не подойдет?


 
Balu   (2002-08-23 14:37) [8]

Опоздал я :)
SELECT ID, MIN(Name) FROM YourTable
GROUP BY ID


 
3JIA9I CyKA   (2002-08-23 14:39) [9]

Бред


 
Johnmen   (2002-08-23 14:45) [10]

>Shaman_Naydak © (23.08.02 14:34)

Хорошее решение !

>Balu ©

Вообще-то надо пересмотреть подходы к проектированию БД...


 
alex-ran   (2002-08-23 14:50) [11]

Когда я говорил что поле ИД уникально, то имел ввиду уникальность не в таблице а вообще. Т.е. у нас на Украине каждому человеку присвоен УНИКАЛЬНЫЙ иденификационный номер, каждому предприятию - УНИКАЛЬНЫЙ код ОКПО.
Далее, какой-нибудь Пупкин платит нам деньги с разных банков и соответственно с разных счетов, в БД банка где у нас счет формируется куча записей о этом Пупкине, причем единственным общим у них только его ИД! Поэтому отбирать все его платежи можно только по этому полю.
Повторюсь: покажите мне человека который помнит клиентов не по имени а по его КОДУ!
Посему из примера выше надо отобрать только:
12345678 Рога и копыта ООО
или только
12345678 ООО "Рога и копыта"
но никак не вместе!!!



 
alex-ran   (2002-08-23 15:03) [12]

>Shaman_Naydak ©, Balu © - то что доктор прописал!!!
Огромное мерси. А я то на DISTINCT зациклился, давно пора было с другой стороны подойти.


 
Johnmen   (2002-08-23 15:04) [13]

Поскольку ID д.б.все-таки уникальным, то в данном случае все возможные наименования организации надо выносить в отдельную табл. Это обычный принцип нормализации. И поэтому не придется ломать голову и извращаться при написании вполне невинных запросов...:-)


 
alex-ran   (2002-08-23 15:11) [14]

>Johnmen ©
Это я с превиликим удовольствием передам разработчикам клиентской части нашей банковской программы :),
а пока что будем извращаться ;-)


 
Val   (2002-08-23 15:16) [15]

>alex-ran © (23.08.02 15:11)
да..ну причем здесь разработчики клиентской части, если дело в проектировании бд?


 
alex-ran   (2002-08-23 15:25) [16]

>Val © ага, разработчики клиентскую часть разработали, а БД, с которой ента клиентская часть работает, дали проектировать мне, юзеру. Я правильно Вас понял?


 
Balu   (2002-08-23 15:44) [17]

С каких пор, сначала пишеться клиентская часть, а потом БД.
Я бы ещё понял: РАЗРАБОТКА (проэктирование) клиентской части -> проэктирование БД, а потом уже ПИСАТЬ клиента.

>Johnmen © (23.08.02 14:45)
>Вообще-то надо пересмотреть подходы к проектированию БД...

Это, по моему, не ко мне :(


 
Val   (2002-08-23 15:53) [18]

>alex-ran © (23.08.02 15:25)
нет не правильно.я не знаю кто-чего-кому давал у вас, я говорил о том, что ваша фраза выглядит несколько нелепо, поскольку разработчик клиентской части так называется, потому что он разрабатывал именно клиентскую часть, как вы понимаете(или нет?).
другой вопрос, что это могут быть одни и те же люди(с разр. БД), но вы сказали именно так как сказали, на что я и обратил ваше внимание.


 
alex-ran   (2002-08-23 16:37) [19]

>Val © согласен, прозвучало коряво :)
но мне как-то абсолютно до лампочки кто в фирме разработчике продумывал структуру БД, а кто писал клиетскую часть, для меня это просто ФИРМА, предоставившая программный продукт.

И просто не хочется перегружать форум несущественными подробностями, иначе можно дойти до размера сапог ;-)


 
Виталий Панасенко   (2002-08-23 16:42) [20]

Ну, едси быть точным, то у нас на Украине :-))) код ОКПО у выше- и нижестоящей организации, кажись, один и тот же ... (это я на всяк выпадок, может учтется, где-нибудь)


 
alex-ran   (2002-08-23 17:07) [21]

>Виталий Панасенко
1) это, может быть и возможно, не встречал, гораздо чаще встречал что большие, финансово разделенные, структурные подразделения внутри одной и той же организации имеют свои кода.
2) с точки зрения человека, юзающего Клиент-Банк, обычно бывает все равно, выше- или нижестоящая организация перечислила деньги.
3) что для меня особенно удивительно, что все банки с которыми я когда либо работал создают свои БД с ключом по расчетному счету, а не по ОКПО (и затем р/сч), хотя я АБСОЛЮТНО согласен с
Johnmen © (23.08.02 15:04)

И всем
Большое спасибо за участие в обсуждении моей проблемы,
кто хочет продолжить - ICQ 65794521



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
1-50733
Andrei_
2002-09-05 12:59
2002.09.16
Включение/выключение монитора.


6-50898
bmai
2002-07-04 22:38
2002.09.16
release & renew IP


4-51023
SPeller
2002-07-24 19:08
2002.09.16
CreateToolbarEx


3-50587
Soft
2002-08-24 15:55
2002.09.16
Передача параметров в SQL запросе.


1-50829
Канадин Владимир
2002-09-03 13:20
2002.09.16
Поднять MDI окно





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