SQL - 如何根据另外两个表中的数据从一个表中选择行?

时间:2018-05-03 14:29:49

标签: sql multiple-tables

我有一个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 :(得分:7)

您正在寻找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

答案 1 :(得分:2)

实际上,如果你想要所有客户,你可能想要每个客户一行,而不管行为中匹配行的数量。

建议使用existsin

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,这一点尤为重要。

答案 2 :(得分:2)

使用内部联接

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

答案 3 :(得分:1)

请尝试以下代码

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

答案 4 :(得分:1)

试试这个吗?

SELECT LOAN.customer_it FROM LOAN
WHERE LOAN.behavior_id IN
    (SELECT BEHAVIOR.behavior_id
    from BEHAVIOR where BEHAVIOR.unpaid_number>=1)