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

Вниз

Помогите составить запрос   Найти похожие ветки 

 
The   (2003-11-20 10:52) [0]

День добрый

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

А В С
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 10:57) [1]

SELECT * FROM TABLE WHERE A<>B AND C IN(10,11) не подойдет ?


 
Johnmen   (2003-11-20 10:58) [2]

>...выбрать все записи, где С in (10, 11), но имеют разное значение по полю А или В.
>
А В С
...
0 0 10
....

Да ? :)


 
Zacho   (2003-11-20 11:01) [3]


> Johnmen © (20.11.03 10:58) [2]

А я и не обратил внимания :)


 
ZrenBy   (2003-11-20 11:02) [4]

declare @t table(a int, b int, c int)

insert into @t
select 0, 1, 11 union
select 0, 0, 10 union
select 1, 0, 10 union
select 1, 0, 11 union
select 2, 0, 10 union
select 2, 1, 11 union
select 5, 0, 11 union
select 4, 0, 10 union
select 4, 0, 11 union
select 3, 0, 10

select t.a,t.b,t.c from (
select a,b from @t group by a,b having sum(1)=1
)q inner join @t t on q.a=t.a and q.b=t.b
order by 1,2


 
ZrenBy   (2003-11-20 11:05) [5]

where c in (11,10) забыл


 
sniknik   (2003-11-20 11:07) [6]

Johnmen © (20.11.03 10:58) [2]
так думаю имелась ввиду в комбинации (A||B), 00 ведь нигде не больше не повторяется.


 
Johnmen   (2003-11-20 11:11) [7]

>sniknik © (20.11.03 11:07)

Тогда, наверное, ему достаточно DISTINCT.


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

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


 
The   (2003-11-20 11:25) [9]

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

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


 
sniknik   (2003-11-20 11:26) [10]

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


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

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) первая статья встречается в неизмененном виде, то есть имеет одинаковую версию. это же очевидно.


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

вроде допер.

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)..." ))


 
Johnmen   (2003-11-20 11:59) [13]

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


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

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


 
Zacho   (2003-11-20 12:12) [15]

Если в таблице есть первичный ключ, предположим поле 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:20) [16]

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


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


> The (20.11.03 12:20) [16]

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


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

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


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


> 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 18:44) [20]

2 Zacho

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


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

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


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


> The (20.11.03 18:44) [20]

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


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

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


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

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

не получится


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

[24] The (20.11.03 18:54)

А если 2 раза?


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


> The (20.11.03 18:54) [24]

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


 
Zacho   (2003-11-20 19:19) [27]

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



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

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

Наверх





Память: 0.5 MB
Время: 0.471 c
7-36871
Serge
2003-09-29 21:49
2003.12.12
Перехват чтения/записи файла


14-36800
Думкин
2003-11-20 05:07
2003.12.12
С днем рождения! 20 ноября.


1-36668
austin
2003-11-29 22:35
2003.12.12
Автоматизация и Excel


3-36501
Ormada
2003-11-21 14:16
2003.12.12
Fields


7-36874
Серж
2003-10-07 18:33
2003.12.12
Получить путь к выполняемой программе





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