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

Вниз

Выбор уникальных полей   Найти похожие ветки 

 
Piter ©   (2004-06-15 17:41) [0]

В общем, есть поле N1 и есть поле N2.

Совместно они определяют уникальность записи. То есть, не бывает записей, чтобы и N1, и N2 совпадали. Могут совпадать N1, могут совпадать N2, но никак они вместе.

Так вот задача - выбрать все записи, у которых N1 и N2 разные (то есть, как раз выбрать уникальные записи).

SELECT DISTINCT N1, N2 FROM MyTable

не катит. Так как надо вернуть все поля, а не только N1 и N2. В общем, задача простая, но я туплю...


 
Sandman25 ©   (2004-06-15 17:46) [1]

SELECT DISTINCT N1, N2 FROM MyTable
или
SELECT N1, N2 FROM MyTable
должны работать, причем одинаково, если (N1,N2) уникально


 
Sandman25 ©   (2004-06-15 17:49) [2]

n1 n2 n3
1  2   3
1  2   4

Что возвращать?


 
sniknik ©   (2004-06-15 17:50) [3]

GROUP BY N1, N2 катит, только надо решить что из остальных полей явно разномастных (раз их нельзя в выборку с дистинкт включить) выбирать.


 
Johnmen ©   (2004-06-15 17:51) [4]

>То есть, не бывает записей, чтобы и N1, и N2 совпадали.
и далее
>выбрать все записи, у которых N1 и N2 разные

:)))

Формулируй чётче...


 
Piter ©   (2004-06-15 18:00) [5]

Johnmen (15.06.04 17:51) [4]

БЛИН! Лоханулся... в общем, бывают записи с одинаковым N1 и N2!
И нужно

>выбрать все записи, у которых N1 и N2 разные


 
Piter ©   (2004-06-15 18:03) [6]

Sandman25 (15.06.04 17:49) [2]
n1 n2 n3
1  2   3
1  2   4


У записей, у которых N1 и N2 одинаковые - другие поля тоже одинаковые, кроме одного :))

В общем, чтобы не путаться - пофигу что возвращать, хоть n3=3, хоть n3=4, это неважно


 
Johnmen ©   (2004-06-15 18:08) [7]

Осталось огласить название сервера.


 
Piter ©   (2004-06-15 18:10) [8]

Johnmen (15.06.04 18:08) [7]

Firebird, если это важно...


 
Vlad ©   (2004-06-15 18:20) [9]


> Piter ©   (15.06.04 18:10) [8]


> выбрать все записи, у которых N1 и N2 разные

так получается что тебе нужно выбрать записи у которых N1<>N2 ?

или же, подозреваю, нужно отсеять дублирующие записи, чтобы связка (N1+N2) стала уникальной ?

проясни, если не сложно.


 
sniknik ©   (2004-06-15 18:23) [10]

> Firebird, если это важно...
это вторая по важности вешь, после той что у тебя базы...

SELECT N1, N2, Min(N3), ...  FROM MyTable
GROUP BY N1, N2


 
Johnmen ©   (2004-06-15 18:29) [11]

Примерно так
SELECT * FROM MyTable T1
WHERE T1.RDB$DB_KEY =
 (SELECT FIRST 1 T2.RDB$DB_KEY
  FROM MyTable T2
  WHERE T2.N1=T1.N1 AND T2.N2=T1.N2 AND T2.N1<>T2.N2)


 
Johnmen ©   (2004-06-15 18:34) [12]

Да, и главное ! Тщательно продумывать структуру таблиц БД ! Чтобы не было мучительно больно и т.д.


 
Piter ©   (2004-06-15 18:40) [13]

Vlad (15.06.04 18:20) [9]
или же, подозреваю, нужно отсеять дублирующие записи, чтобы связка (N1+N2) стала уникальной ?


ДА


 
Piter ©   (2004-06-15 18:41) [14]

Johnmen (15.06.04 18:29) [11]
RDB$DB_KEY


А что это такое - RDB$DB_KEY ?

У меня к тому же Firebird Embedded -там может не быть системных таблиц... если я вообще правильно понимаю...


 
Piter ©   (2004-06-15 18:54) [15]

sniknik (15.06.04 18:23) [10]
SELECT N1, N2, Min(N3), ...  FROM MyTable
GROUP BY N1, N2


Пишет:
Dynamic SQL Error
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)


sniknik (15.06.04 18:23) [10]
это вторая по важности вешь, после той что у тебя базы...


неужели в MSSQL было бы по другому оформлен такой простой запрос?


 
Piter ©   (2004-06-15 19:03) [16]

я понял... в примере:

sniknik (15.06.04 18:23) [10]
SELECT N1, N2, Min(N3), ...  FROM MyTable


вместо троеточия нельзя ничего подставить больше :(... там везде должны быть агрегатные функции, а что делать если у меня строки?


 
sniknik ©   (2004-06-15 19:29) [17]

> вместо троеточия нельзя ничего подставить больше :(
можно, если выбереш что поставить, о чем и разговор, их же там несколько разных (все добавленное должно быть с агрегатами (выбор)).

> неужели в MSSQL было бы по другому оформлен такой простой запрос?
возможно. (есть варианты)
для аксесс меняем min, и работать будет гораздо быстрее
SELECT N1, N2, First(N3), ...  FROM MyTable
GROUP BY N1, N2


 
sniknik ©   (2004-06-15 19:33) [18]

> а что делать если у меня строки?
а разве огненная птица не работает со строками в агрегатах? дятел влегкую... вот еще различие (если так).
Sum естественно не пойдет. ;о))


 
Romkin ©   (2004-06-15 19:45) [19]

Ну елки... http://www.ibase.ru/devinfo/deldupes.htm
зеленые :)))
>У меня к тому же Firebird Embedded -там может не быть системных таблиц... если я вообще правильно понимаю...
Угу. Почти. Этот сервер отличается от нормального только тем, что в реестр не смотрит, и допускает только одно соединение к БД. больше различий нет Компилят-то с одного исходника


 
Piter ©   (2004-06-15 19:53) [20]

Romkin (15.06.04 19:45) [19]
больше различий нет


ну конечно...
Как минимум, в FB EMB нету аутентификации, там нету ни одной системной таблицы... разве это не различие?

sniknik (15.06.04 19:33) [18]
а разве огненная птица не работает со строками в агрегатах?


да вроде работает... только как-то некрасиво так писать:

Max(n3), Max(n4), Max(n5) и т.д.

неужели нельзя как-то покрасивее?

И еще никак не могу вникнуть в код Johnmen ©   (15.06.04 18:29) [11] - что там хоть делается то? :)


 
Johnmen ©   (2004-06-15 21:35) [21]

>что там хоть делается то?

Там всё просто.
1. Если у тебя нет (а это так, и в этом большой просчёт) признака уникальности записи, то будем использовать в его качестве "указатель" на расположение записи в БД. Это RDB$DB_KEY.
2. Из совокупности "одинаковых" записей берём одну, первую (т.к. тебе всё равно, какую, как ты сказал). Она и попадет в результирующий НД.

>...там нету ни одной системной таблицы..

Откуда такие сведения ? :)))
Всё-таки рекомендую почитать общую теорию построения баз данных...


 
Piter ©   (2004-06-15 22:51) [22]

Johnmen (15.06.04 21:35) [21]
>...там нету ни одной системной таблицы..
Откуда такие сведения ? :)))


ну... элементарная логика... в Firebird, например, есть файл isc4.gdb, где и хранятся системные таблицы.
А в FB EMB это где?! Нету же такого файла!


 
Romkin ©   (2004-06-15 23:52) [23]

Элементарная логика подсказывает, что вся БД содержится в одном файле :)))
А в isc4 - логины, имена и пароли пользователей для входа на сервер...
Все-таки, как насчет теории реляционных БД?
И как насчет попробовать, проверить, а не говорить глупости?


 
Piter ©   (2004-06-16 14:35) [24]

Romkin (15.06.04 23:52) [23]
Элементарная логика подсказывает, что вся БД содержится в одном файле


Да? Ну например... например, список индексов? Да, индексы хранятся в файле с базой... но список индексов? Вот ты можешь определить какие поля проиндексированы, если у тебя будет только файл gdb с базой?

Romkin (15.06.04 23:52) [23]
А в isc4 - логины, имена и пароли пользователей для входа на сервер...


вот именно. Как минимум еще в EMB нету аутентификации, а не только
>Этот сервер отличается от нормального только тем, что в реестр не смотрит, и допускает только одно соединение к БД. больше различий нет


 
Romkin ©   (2004-06-16 14:40) [25]

Piter ©  (16.06.04 14:35) [24] А инструкцию почитать? Select * from rdb$indices
Select * from rdb$index_segments
И идентификация пользователя есть, просто пароль не проверяется. А права будут для того, под кем вошел


 
Johnmen ©   (2004-06-16 14:41) [26]

>Piter ©   (16.06.04 14:35) [24]

Спорить не обладая информацией и знанием по меньшей мере неумно.
Вся исчерпывающая информация о БД лежит в её системных таблицах.
(за искл. некоторых специфических вещей)



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

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

Наверх





Память: 0.51 MB
Время: 0.031 c
14-1087779761
Vasya.ru
2004-06-21 05:02
2004.07.11
RTF - чем хуже DOC а?


1-1088246582
X9
2004-06-26 14:43
2004.07.11
CM_MOUSEENTER, CM_MOUSELEAVE и TSpeedButton


3-1087372749
vr!
2004-06-16 11:59
2004.07.11
Проблема с открытием большого DBF файла тз Делфи


1-1088177777
Lexa
2004-06-25 19:36
2004.07.11
как сделать текст в виде ссылки


14-1087994131
Vlad Oshin
2004-06-23 16:35
2004.07.11
Странно... MASM32, глюк...





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