0

我有两张看起来像这样的桌子

用户

id
name

贷款

id
borrower_id
lender_id
amt

我需要选择所有贷款,在选择中匹配他们的名字,所以对于以下数据

用户

id, name
1, mark
2, james

贷款

id, lender_id, borrower_id, amt
1,  1,         2,           100
2, 2,          1,           150
3, NULL,       1,           500
4, NULL,       2,           300

NULL 是在贷方没有回应的情况下。输出应该是

loan_id, lender, borrower, amt
1,       mark,   James,   100
2,       James,  mark,    100
3,       --,     mark,   100
4,       --,     mark,   100

这是我试过的

Select
  loans.amt As amt,
  borrower.name As borrower,
  lender.name As lender,
  loans.id AS loan_id
From
  (users borrower Join
  loans On borrower.id = loans.borrower_id) Join
  users lender On lender.id = loans.lender_id
4

2 回答 2

1

您需要LEFT JOIN包含只有一个表具有符合条件的行的行。

试试这个:

Select
  loans.amt As amt,
  borrower.name As borrower,
  lender.name As lender,
  loans.id AS loan_id
From
  loans 
    LEFT JOIN users AS borrower ON loans.borrower_id = borrower.id
    LEFT JOIN users AS lender ON loans.lender_id = lender.id
于 2013-11-14T13:54:48.200 回答
0

在 oracle 中,您可以使用 (+) 符号,而不是使用左连接。

例如,

选择不同的 l.id 作为loan_id,u1.name 作为贷方,u2.name 作为借方,l.amt 作为来自用户 u1 的 amt,用户 u2,贷款 l 其中 u1.id(+)=l.lender_id 和 u2.id( +)=l.borrower_id

于 2013-11-14T14:27:56.683 回答