Abed Al Rahman Hussien Balhawan Ответов: 1

Sql запрос найти все идентификаторы клиентов для клиентов у которых есть учетная запись но нет кредита


customer table (CUST_ID,CUST_NAME,CUST_ADDRESS,EMP_ID)

has table (CUST_ID,ACCOUNT_NUMBER)

take table (CUST_ID,LOAN_NUMBER)

table loan (LOAN_NUMBER,AMOUNT,BRANCH_NAME)

table account(ACCOUNT_NUMBER,ACCOUNT_BALANCE)


Q1 найти все идентификаторы клиентов для клиентов, у которых есть счет, но нет кредита

Что я уже пробовал:

select distinct c.cust_id as customer_taking_loan
from customer c
join has h on c.cust_id=h.cust_id
join take t on c.cust_id=t.cust_id
where c.cust_id=h.cust_id
(
where not exist
(select 1 from take t c.cust_id=t.cust_id))
order by c.cust_id

1 Ответов

Рейтинг:
8

MadMyche

Вы не слишком далеки от того, что у вас есть; попробуйте это

SELECT Distinct c.Cust_ID
FROM   Customer c
INNER JOIN Has  h ON c.Cust_ID = h.Cust_ID
WHERE  Cust_ID NOT IN (SELECT Cust_ID FROM Take)
Вы можете быть в состоянии выйти сухим из воды с этим также
SELECT Distinct Cust_ID
FROM   Has
WHERE  Cust_ID NOT IN (SELECT Cust_ID FROM Take)


Abed Al Rahman Hussien Balhawan

в первом методе отсутствовал символ C. Перед cust_id

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

можете ли вы объяснить мне, где я был неправ и почему?

MadMyche

Вы правы; WHERE предложение в первом примере кода выдаст ошибку о CustID неоднозначно- хорошая работа , чтобы выяснить это самостоятельно.

Чтобы узнать, где/почему вы ошиблись, мне нужно знать, каким был ваш мыслительный процесс, когда вы писали запрос - я могу сказать вам, каким был мой мыслительный процесс, когда я писал запросы, и почему они работают:

Чтобы получить всех уникальных клиентов, у которых были учетные записи, мы делаем внутреннее соединение между покупатель и имеет таблицы.
Как бы то ни было, он также будет содержать клиентов, у которых есть кредиты, поэтому мы удаляем их с помощью подзапроса брать стол