我有一个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
。
有人能告诉我一种解决方法吗?
由于
答案 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)
实际上,如果你想要所有客户,你可能想要每个客户一行,而不管行为中匹配行的数量。
建议使用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
,这一点尤为重要。
答案 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)