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

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

Запрос [Paradox]


Страницы:   1 2

glow ©   (2003-09-16 12:51:00) 

Две таблицы связаны один-ко-многим (по регистрационному номеру), условия по двум полям из одной таблицы, и по одному из подчиненной (Prikaz.db P)P.Type - это числовое поле которое содержит код приказа. Так вот из подчиненной таблицы необходимо вытащить только те записи, которые не имеют приказа с кодом, например, 2.(Например, одной записи в главной табл. с RNOM=1, соответствует 4 записи с RNOM=1 в подчиненной, из которых ни одна не должна иметь TYPE=2). Уважаемые Мастера, помогите реализовать это условие.
SELECT A.KAT, A.FOB, P.Type FROM ASPI.db A LEFT JOIN Prikaz.db P ON A.RNOM=P.RNOM WHERE A.KAT=1 AND A.FOB=1 AND (P.Type<>2)
проблема в выделенном куске (знаю, что <> 2 не верно)


ЮЮ   (2003-09-17 07:47:00) [21]

>Да он выполняется, но в него попадают записи не только А.KAT=1

Это не может быть. Или твой вариант запроса отличается от предложенного


glow   (2003-09-17 05:54:00) [22]


> Не может быть ! Запрос верен.

Да он выполняется, но в него попадают записи не только А.KAT=1


> A.FOB = 1

Означает обучающиеся очно


Sandman25   (2003-09-16 16:49:00) [23]

Попробуйте убрать условие A.FOB = 1
Я же не знал (и до сих пор не знаю :-)) его смысл, поэтому просто тупо его скопировал. Возможно, его нужно засунуть во вложенный (внутренний) select.


Johnmen   (2003-09-16 15:01:00) [24]

>glow © (16.09.03 14:34)
>...запрос выполняется неверно

Не может быть ! Запрос верен.


glow   (2003-09-16 14:34:00) [25]


> SELECT A.KAT, A.FOB, B.Type
> FROM ASPI.db A,
> Prikaz.db B
> WHERE A.KAT = 1
> AND A.FOB = 1
> AND B.RNOM = A.RNOM
> AND NOT EXISTS
> (SELECT *
> FROM Prikaz.db C
> WHERE C.RNOM = A.RNOM
> AND C.Type = 2
> )

Спасибо за ответ, но все же этот запрос выполняется неверно
Вобщем нужно выбрать всех, обучающихся очно, с категорией 1, у которых в таблице приказов нет приказа на отчисление (TYPE<>2)


Sandman25   (2003-09-16 13:29:00) [26]

SELECT A.KAT, A.FOB, B.Type
FROM ASPI.db A,
Prikaz.db B
WHERE A.KAT = 1
AND A.FOB = 1
AND B.RNOM = A.RNOM
AND NOT EXISTS
(SELECT *
FROM Prikaz.db C
WHERE C.RNOM = A.RNOM
AND C.Type = 2
)


glow   (2003-09-16 13:27:00) [27]


> Например, одной записи в главной табл. с RNOM=1, соответствует
> 4 записи с RNOM=1 в подчиненной,

среди этих 4-х поле: 1-ая запись TYPE=3
2-ая запись TYPE=2
3-ая запись TYPE=1
4-ая запись TYPE=6
т.к. из них одна имеет TYPE=2, то и из главной таблицы брать запись с RNOM=1 не нужно, если бы ни одна из подчиненных записей не имела бы TYPE=2, то запись с RNOM можно было бы включить в выборку.
Надеюсь что понятно


Johnmen   (2003-09-16 13:06:00) [28]

Неясно, в чем проблема...
М.б. надо ... ON (A.RNOM=P.RNOM) AND (P.Type<>2) ...
И расставь скобки в WHERE.


Страницы:   1 2

Наверх

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