Как инвертировать оператор в SQL-сервере - PullRequest
0 голосов
/ 26 июня 2019

Я разрабатываю программное обеспечение для обмена стека, и у меня есть этот запрос для получения имени учетной записи, в которой у моего клиента есть учетная запись

SELECT TOP (200) account.account_no, account_type.account_type_id, account_type.account_name, customer.first_name
FROM account 
     INNER JOIN customer ON account.customer_id = customer.customer_id 
     INNER JOIN account_type ON account.account_type = account_type.account_type_id
WHERE (account.customer_id = 2)

А теперь я хочу выбрать те учетные записи, в которых у моего клиента нет учетной записи

Ответы [ 3 ]

1 голос
/ 26 июня 2019

Вы можете использовать RIGHT JOIN с WHERE account.customer_id is null

SELECT TOP(200) account.account_no,
       account_type.account_type_id,
       account_type.account_name,
       customer.first_name
  FROM account
 RIGHT JOIN customer
    ON account.customer_id = customer.customer_id  
 INNER JOIN account_type
    ON account.account_type = account_type.account_type_id
 WHERE account.customer_id is null
0 голосов
/ 26 июня 2019

Я бы использовал NOT EXISTS:

SELECT act.*
FROM account_type act
WHERE NOT EXISTS (SELECT 1
                  FROM account a
                  WHERE a.account_type = act.account_type AND
                        a.customer_id = 2
                 );

Обратите внимание, что таблица customer для этого не нужна.

0 голосов
/ 26 июня 2019

Этот запрос:

select t.account_type_id from account a 
inner join account_type t ON a.account_type = t.account_type_id
where a.customer_id = 2

содержит все account_type_id, которые вы хотите исключить.
Так что используйте его с NOT IN предложением:

select account_type_id, account_name 
from account_type
where account_type_id not in (
  select t.account_type_id from account a 
  inner join account_type t ON a.account_type = t.account_type_id
  where a.customer_id = 2
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...