SQL - Как выбрать строки из одной таблицы в зависимости от данных из двух других таблиц? - PullRequest
0 голосов
/ 03 мая 2018

У меня вопрос по SQL. Это простая проблема, но я совсем не SQL-парень.

Вот ситуация, у меня есть три таблицы:

CUSTOMER(
    PK(customer_id)
)

LOAN(
    PK(loan_id),
    customer_it,
    behavior_id
)

BEHAVIOR(
    PK(behavior_id),
    unpaid_number
)

// PK(x): x is a primary key.

Я бы хотел выбрать всех CUSTOMERs, у которых есть unpaid_number >= 1.

Кто-нибудь может показать мне способ обойти это?

Спасибо

Ответы [ 5 ]

0 голосов
/ 03 мая 2018

Использовать внутреннее соединение

ВЫБРАТЬ c. * ОТ КЛИЕНТА c ВНУТРЕННИМ СОВМЕСТНЫМ КРЕДИТОМ l ВКЛ l.customer_id = c.Customer_id ВНУТРЕННЕЕ ПОВЕДЕНИЕ СОЕДИНЕНИЯ b ВКЛ b.behavior_id = l.behavior_id ГДЕ unpaid_number> = 1

0 голосов
/ 03 мая 2018

попробуйте это?

SELECT LOAN.customer_it FROM LOAN
WHERE LOAN.behavior_id IN
    (SELECT BEHAVIOR.behavior_id
    from BEHAVIOR where BEHAVIOR.unpaid_number>=1)
0 голосов
/ 03 мая 2018

Пожалуйста, попробуйте ниже код

SELECT c.*
FROM CUSTOMER c
INNER JOIN LOAN l
    ON l.customer_id = c.Customer_id
INNER JOIN BEHAVIOR b
    ON b.behavior_id = l.behavior_id
WHERE  unpaid_number >=1
0 голосов
/ 03 мая 2018

На самом деле, если вы хотите, чтобы все клиенты, по-видимому, вы хотите одну строку на клиента, независимо от количества совпадающих строк в поведении.

Это предполагает использование exists или in:

select c.*
from customer c
where exists (select 1
              from loan l join
                   behavior b
                   on b.behavior_id = l.behavior_id
              where b.unpaid_number >= 1 and
                    l.customer_id = c.customer_id
             );

Это особенно важно, если вы планируете использовать select distinct.

0 голосов
/ 03 мая 2018

Вы ищете INNER JOIN. Используйте как:

SELECT * FROM CUSTOMER c
INNER JOIN LOAN l ON c.customer_id = l.customer_it
INNER JOIN BEHAVIOR b ON b.behavior_id = l.behavior_id
WHERE b.unpaid_number>=1
...