Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Через SELECT пройтись по другой выборке  [new]
Jazzis
Member

Откуда:
Сообщений: 10
Всем привет! У меня есть вот такой запрос (пример):
with a as ( ... ), -- какая-то выборка
select (
(select id from table1)
except
(select id from table2)
from a

Вот как мне сделать так, чтобы по каждой записи из A получить массив ID-шников из table1 за исключением тех, что в table2 и их же выдать в выборке?
23 сен 16, 10:14    [19699212]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
Jazzis
Member

Откуда:
Сообщений: 10
P.S. Не нашёл кнопки "Изменить сообщение".
with a as ( ... ), -- какая-то выборка
select (
(select f2_id from table1)
except
(select f2_id from table2)) as f2_id, a.f6_id
from a
23 сен 16, 10:18    [19699227]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
buven
Member

Откуда:
Сообщений: 792
Jazzis,

with a as ( ... ), -- какая-то выборка
b as ( 
select f2_id from table1
except
select f2_id from table2
)
select * from a left join b on a.f2_id=b.f2_id


Я правильно понял?
Извиняюсь, но в условии какая то каша...
23 сен 16, 10:48    [19699323]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Jazzis,

вот мне иногда просто интересно ..вы синтаксиси на лету выдумываете или как ? exists / not exists вам в помощь
Хотz except тоже хорошо,но не в месте написанным вами
23 сен 16, 10:50    [19699330]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
Jazzis
Member

Откуда:
Сообщений: 10
Я синтаксис не выдумывал, я описал с помощью него (пускай и неправильного) идею, чего я хочу.
23 сен 16, 10:57    [19699375]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
Jazzis
Member

Откуда:
Сообщений: 10
buven,
Почти. Смотрите, в A выбирается только одно поле, с которым есть связь в table1 и table2. В B надо взять запись, получить из него массив записей, исключая из него такие же записи из другой выборки. Затем выдать получившуюся выборку в результат. Затем брать следующую запись из A и так по кругу.

Я новенький в SQL и ещё не научился думать им, если так нельзя, то пожалуйста, расскажите как можно реализовать по другому похожую идею?
23 сен 16, 11:06    [19699439]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
buven
Member

Откуда:
Сообщений: 792
Jazzis
расскажите как можно реализовать по другому похожую идею?

Идея то непонятна. Давайте на простом примере. Без SQL, только данные в таблице как есть и результат, который нужно получить.
Подозреваю, что вы хотите передать что-то на клиента и часть логики обработки клиента пытаетесь затащить в базу. Возможно не совсем ту часть.
23 сен 16, 11:50    [19699694]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
Jazzis
Member

Откуда:
Сообщений: 10
buven,
Спасибо за ваш предыдущий ответ, сделал через left join-ы. Идея заключалась в том, чтобы из первой выборки брать ID-шник, по внешнему ключу из другой таблицы получать другие ID-шники, и эти же ID-шники вставлять сразу же в результативную выборку. Затем брать следующий ID из первой выборки и так далее. На примере думаю будет понятнее:
Из первой выборки выбираются F6_ID.
F6_ID |
------|
 1234 |
 2578 |
.....

В других таблицах есть внешний ключ по этому F6_ID и нужные F2_ID:
F6_ID | F2_ID
---------------
1234  | 823
1234  | 12
1234  | 9054
2578  | 10245
2578  | 23
....  | ....

Затем одним запросом мне нужно брать каждый F6_ID из первой выборки, получать все F2_ID из второй таблицы, исключая какие-то из третьей через EXCEPT. Затем в этом же запросе в результат вставлять оставшиеся F2_ID.
24 сен 16, 06:02    [19703634]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
Jazzis
Member

Откуда:
Сообщений: 10
И брать следующий F6_ID.
P.S. Не подскажите ещё, как редактировать сообщение на этом форуме?
24 сен 16, 09:35    [19703708]     Ответить | Цитировать Сообщить модератору
 Re: Через SELECT пройтись по другой выборке  [new]
iljy
Member

Откуда:
Сообщений: 8711
Jazzis,

select *
from t1 left join t2 on t1.id = t2.id -- или не left, смотря что вам нужно
where not exists (select * from t3 where t3.id2 = t2.id2)


Учитесь мыслить не строками, а множествами целиком.
24 сен 16, 11:17    [19703777]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить