![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос на составную выбору без повторений [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