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

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

Запрос на составную выбору без повторений [IB6.x]


Nicolas ©   (2008-06-03 15:36:00) 

Мастера, помогите решить такую проблему:
Есть 2 таблицы Tab1(ID,N_Z)  и Tab2(N_Z, Os)
Дано ID=4. Надо выбрать из Tab1 все поля, c данным ID, включающие только те N_Z таблицы Tab2, где Os=0. Повторяющеся значения N_Z  не должны выбираться (т.е
Tab1:
    ID      N_Z
     1        1
     1        2
     2        3

Tab2:
   N_Z     Os
   1        100
   1           0  
   2         22
   2           0
   3         40

Результат:
   ID      N_Z
   1         1
   1         2
).
Ответьте плиз. конкретным запросом.


Sergey13   (2008-06-04 10:28:00) [1]

> [14] Nicolas ©   (04.06.08 10:18)
> SELECT N_Z, Os
> FROM Tab2
> WHERE N_Z NOT IN(SELECT N_Z FROM Tab2 WHERE Os=0)

А смысл в подзапросе какой?
SELECT N_Z, Os
FROM Tab2
WHERE Os<>0


Nicolas   (2008-06-04 10:18:00) [2]


> Anatoly Podgoretsky ©   (04.06.08 08:50) [13]
> Вряд ли поможет, поскольку даже простые примеры приведеные
> выше не читает, вместо этого пришет свою, не работающую
> ерунду.Я ему желаю поработать с большими таблицами, а не
> с тестовыми для курсовой. Сомневаюсь, что он даже понял,
>  что такое он написал.

То, что выше получилось, а с остальным я сам разобрался:
SELECT N_Z, Os
FROM Tab2
WHERE N_Z NOT IN(SELECT N_Z FROM Tab2 WHERE Os=0)

Всем спасибо.
Тему закрываем


Anatoly Podgoretsky   (2008-06-04 08:50:00) [3]

Вряд ли поможет, поскольку даже простые примеры приведеные выше не читает, вместо этого пришет свою, не работающую ерунду.
Я ему желаю поработать с большими таблицами, а не с тестовыми для курсовой. Сомневаюсь, что он даже понял, что такое он написал.


Sergey13   (2008-06-04 08:44:00) [4]

> [10] Nicolas ©   (03.06.08 18:11)
> За distinct спасибо. Давайте теперь оставим только tab2.

Самое время взять в руки учебник по SQL.


Правильный_Вася   (2008-06-03 21:33:00) [5]

not exists


Nicolas   (2008-06-03 18:11:00) [6]

За distinct спасибо. Давайте теперь оставим только tab2.
Нужно произвести выборку слкдующим образом: Если какому либо N_Z соответствует значение из OS=0, то этот N_Z не включается в конечный результат.
Т.е должно получиться:
N_Z      Os
 3         40

select distinct N_Z, OS frm tab2 where os<>0      - конечно не получается, т.к. он выбирает 1-е и 2-е N_Z тоже.


Nicolas   (2008-06-03 17:26:00) [7]

Небольшая поправка, ID=1. (а то ответ в моем примере выглядит некорректно).


Правильный_Вася   (2008-06-03 16:56:00) [8]


> Что не нравится distinct или *

нравится-нравится
там автору еще подумать надо ;)


Smile   (2008-06-03 16:40:00) [9]

Я к тому, что пример автора этому не соответствует:)


Anatoly Podgoretsky   (2008-06-03 16:36:00) [10]

Ну дано, ну подумаешь, что Sergey13 © не указал это в условия, но может автор хоть часть работы сделает сам?


Smile   (2008-06-03 16:30:00) [11]

А я не понял, что означает:
Дано ID=4.
И соответсвенно ...:)


Anatoly Podgoretsky   (2008-06-03 16:20:00) [12]

> Правильный_Вася  (03.06.2008 16:00:03)  [3]

Что не нравится distinct или *


Правильный_Вася   (2008-06-03 16:00:00) [13]


> select distinct *

хитрец ;)


Sergey13   (2008-06-03 15:45:00) [14]

select distinct *
from tab1,tab2
where tab1.n_z=tab2.nz and tab2.os=0


Anatoly Podgoretsky   (2008-06-03 15:44:00) [15]

> Nicolas  (03.06.2008 15:36:00)  [0]

Повторения это distinct, проверка на 0 это WHERE OS = 0


Наверх

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