Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите составить запрос


Страницы:   1 2

The ©   (2003-11-20 10:52:00) 

День добрый

Есть таблица трех полей и данными такого вида

А В С
0 1 11
0 0 10
1 0 10
1 0 11
2 0 10
2 1 11
5 0 11
4 0 10
4 0 11
3 0 10
.. .. ..

с этой таблицы нужно выбрать те записи, которые имеют разное значение или по полю А, или по полю В, но при этом входят в определенный диапазон по полю С. Например, мне нужно выбрать все записи, где С in (10, 11), но имеют разное значение по полю А или В. В результате должен получить такую выборку:

А В С
0 1 11
0 0 10
2 0 10
2 1 10
5 0 11
3 0 10
.. .. ..


Zacho   (2003-11-20 19:19:00) [1]

Вобщем, запрос Sandman25 © (20.11.03 18:48) [21] + Sandman25 © (20.11.03 18:53) [23] - на IB работает, только что проверил из любопытства. В LocalSQL - не знаю, но по идее тоже должен.


Zacho   (2003-11-20 18:57:00) [2]


> The (20.11.03 18:54) [24]

Приведи полностью свой вариант запроса с С IN(..) который не получается. И скази, наконец какая у тебя СУБД и компоненты доступа к данным.


Sandman25   (2003-11-20 18:55:00) [3]

[24] The (20.11.03 18:54)

А если 2 раза?


The   (2003-11-20 18:54:00) [4]

Ну а если добавить в WHERE AND T1.C IN (...) ?

не получится


Sandman25   (2003-11-20 18:53:00) [5]

Вру.
Zacho прав.
Либо к моему запросу добавить
having count(*)=1


Zacho   (2003-11-20 18:50:00) [6]


> The (20.11.03 18:44) [20]

Ну а если добавить в WHERE AND T1.C IN (...) ?


Sandman25   (2003-11-20 18:48:00) [7]

select a, b, max(c)
from t
where c in (10,11)
group by 1,2
?


The   (2003-11-20 18:44:00) [8]

2 Zacho

та то я сгоряча написал, что запрос неправильно работает )
запрос правильно работает, просто хотелось составить такой же, но на любой диапазон по полю С. но так не получиться.


Zacho   (2003-11-20 18:38:00) [9]


> The (20.11.03 17:38) [18]

А за что бить-то ? :)
Посмотри на запрос Zacho © (20.11.03 12:12) [15]. Замени в нем T1.ID <> T2.ID на (T1.A<>T2.A AND T1.B<>T2.B AND ... ), вобщем поле ID на поля входяшие в состав твоего ПК.
Честно говоря, не знаю, как в LocalSQL, а в IB этот запрос работает правильно, и синтаксису SQL92 вроде бы полностью соответствует.


The   (2003-11-20 17:38:00) [10]

ошибался я. неверный запрос я составил.
прошу не бить ногами )


Zacho   (2003-11-20 12:23:00) [11]


> The (20.11.03 12:20) [16]

Ну замени в запросе ID на комбинацию этих полей.
А вообще-то лучше бы сделать искусственный ПК из одного поля, а на естественный наложить UNIQUE CONSTRAINT.


The   (2003-11-20 12:20:00) [12]

первичный ключ составной и состоит из полей А,В,С + еще два поля.


Zacho   (2003-11-20 12:12:00) [13]

Если в таблице есть первичный ключ, предположим поле ID, то вот вариант:

SELECT * FROM T T1
WHERE NOT EXISTS
(SELECT A FROM T T2
WHERE T1.A = T2.A AND T1.B = T2.B AND
T1.ID <> T2.ID)


The   (2003-11-20 12:09:00) [14]

не знаю, но так работает


Johnmen   (2003-11-20 11:59:00) [15]

А причем здесь сцепление строковых значений ???!!!


The   (2003-11-20 11:56:00) [16]

вроде допер.

select z1.A, z1.B, z1.C
from table z1
where C in (10, 11)
and 1=(select count(z2.A||z2.B)
from table z2
where C in (10, 11)
and z1.A=z2.A and z1.B=z2.B)
group by z1.A, z1.C, z1.B

спасибо sniknik за "...комбинации (A||B)..." ))


The   (2003-11-20 11:32:00) [17]

2 sniknik

позвольте возразить. при таких данных:
А В С
1 0 10
1 0 11
.. .. ..
SELECT * FROM TABLE WHERE A<>B AND C IN(10,11)
выдаст мне
А В С
1 0 10
1 0 11
.. .. ..
а это неправильно, так как в этих двух редакциях (10, 11) первая статья встречается в неизмененном виде, то есть имеет одинаковую версию. это же очевидно.


sniknik   (2003-11-20 11:26:00) [18]

The (20.11.03 11:13) [8]
если отбросить мои догадки, то
Zacho © (20.11.03 10:57) [1]
полное соответствие условию (считать что ошибся в выходных данных а не в описании)


The   (2003-11-20 11:25:00) [19]

объясню кратко о самой таблице, а заодно и введу еще одно условие в результатах запроса.

есть база неких документов. один документ может иметь несколько редакций, и состоит из нескольких частей, назовем их статьями. для контроля редакций документа есть таблица содержания документа с полями "Номер статьи", "Версия статьи" и "Номер редакции". Мне нужно показать разницу между двумя редакциями. в результат запроса должны входить статьи, которые имеют разные версии (те, что редактировались) или статьи, которые присутствуют в одной редакции, но отсутствуют в другой. применимо к примеру получается так, что поле А - "Номер статьи", поле В - "Версия статьи" и поле С - "Номер редакции".


The   (2003-11-20 11:13:00) [20]

запрос должен быть на Local SQL.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо