powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Синтаксис SQL мешает написать запрос
6 сообщений из 6, страница 1 из 1
Синтаксис SQL мешает написать запрос
    #38810254
btahkeeeeeeeee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 2 таблицы - Contract и Insurance_Agent. В Insurance_Agent все значения Agent_ID , то есть номера агентов и Insurance_ID , то есть страховые типы в которых этот агент разбирается, а есть таблица Contract , в которой Agent_ID и Insrance_ID могут быть отличные от Insurance_Agent. Так вот, нужно найти агентов, которые лезут заключать контракты по тем страховым типам, в которых они не разбираются. Это я удачно сделал таким образом:
Код: sql
1.
2.
3.
4.
5.
 select Agent_ID,Insurance_ID 
 from Contract
 except
 select Agent_ID,Insurance_ID 
 from Insurance_Agent 


Но теперь мне нужно использовать результат этих преобразований для вывода полной информации о контрактах с такими Agent_ID И Insurance_ID. Sql строго-настрого запрещает мне писать что-то типо:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Select c.*
 from
 (select Agent_ID,Insurance_ID from Contract
 except select Agent_ID,Insurance_ID 
 from Insurance_Agent) as a inner join Contract as c on a.Agent_ID=c.Agent_ID
 where c.Agent_ID in 
 (select Agent_ID,Insurance_ID from Contract
 except select Agent_ID,Insurance_ID 
 from Insurance_Agent) 
 and c.Insurance_ID in 
 (select Agent_ID,Insurance_ID from Contract
 except select Agent_ID,Insurance_ID 
 from Insurance_Agent)


Даже если это и работало бы, мне кажется я бы не вывел то, что мне нужно.
Я не знаю как это сделать, может есть какие-то окольные пути?
На скриншоте слева главная таблица, там где находятся пары Agent_ID,Insurance_ID , которые возможны, а вторая таблица, за ней расположенная с парами Agent_ID,Insurance_ID , которые могут не быть, но контракты были заключены с типами страховок, в которых данный агент не разбирается. Если кто-то мне покажет как вывести номера этих контрактов и всю остальную информацию, из таблицы контрактов о таких злополучных соглашениях- буду очень благодарен!
...
Рейтинг: 0 / 0
Синтаксис SQL мешает написать запрос
    #38810267
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
btahkeeeeeeeee,

Вам мешает не синтаксис, а незнание синтаксиса :)

Код: sql
1.
2.
3.
4.
SELECT *
FROM dbo.Contract C
WHERE NOT EXISTS (SELECT * FROM dbo.Insurance_Agent IA
                   WHERE IA.Agent_ID=C.Agent_ID AND IA.Insurance_ID=C.Insurance_ID)


Заранее пожалуйста.
...
Рейтинг: 0 / 0
Синтаксис SQL мешает написать запрос
    #38810268
Klemzig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
btahkeeeeeeeee,

Код: sql
1.
2.
3.
4.
select c.*
from dbo.Contract c
	left join dbo.Insurance_Agent ia on c.Agent_ID = ia.Agent_ID and c.Insurance_ID = ia.Insurance_ID
where ia.Agent_ID is null;
...
Рейтинг: 0 / 0
Синтаксис SQL мешает написать запрос
    #38810317
btahkeeeeeeeee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ruuubtahkeeeeeeeee,

Вам мешает не синтаксис, а незнание синтаксиса :)

Код: sql
1.
2.
3.
4.
SELECT *
FROM dbo.Contract C
WHERE NOT EXISTS (SELECT * FROM dbo.Insurance_Agent IA
                   WHERE IA.Agent_ID=C.Agent_ID AND IA.Insurance_ID=C.Insurance_ID)


Заранее пожалуйста.
Спасибо=)Помогли неучу)
...
Рейтинг: 0 / 0
Синтаксис SQL мешает написать запрос
    #38810320
btahkeeeeeeeee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Klemzigbtahkeeeeeeeee,

Код: sql
1.
2.
3.
4.
select c.*
from dbo.Contract c
	left join dbo.Insurance_Agent ia on c.Agent_ID = ia.Agent_ID and c.Insurance_ID = ia.Insurance_ID
where ia.Agent_ID is null;


Спасибо,и ваше работает=)Да как так то((( я крутил его неделю,а вы все знаете(((
...
Рейтинг: 0 / 0
Синтаксис SQL мешает написать запрос
    #38810381
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
btahkeeeeeeeee,

да и с except можно при желании, но запрос немного усложняется, лучше как Ruuu написал через not exists()

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select c.*
from Contract as c
where exists(
    select c.Agent_ID, c.Insurance_ID 
    except
    select i.Agent_ID, i.Insurance_ID 
    from Insurance_Agent
)



и учтите, что варианты с not exists и left join будут работать не совсем как except в случае Agent_ID = NULL или Insurance_ID = NULL, потому что там сравнение через "=". в вашей постановке задачи NULL нет и это не критично, но в общем случае результаты разные
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Синтаксис SQL мешает написать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]