2013-05-20 30 views
0

我必须从两个表中选择记录,但在某种程度上将它们结合起来,这是我的表从同一张表中选择两种记录方式?

loans 
---- 
id 
amt 
date 
pay_period 
borrower_id 
lender_id 

用户表

users 
----- 
id 
name 
phone 

这是SQL我有

Select 
    loans.amt, 
    loans.date, 
    loans.pay_period, 
    borrower.phone As borrower_phone, 
    borrower.name As borrower_name, 
    lender.phone As lender_phone, 
    lender.name As lender_name, 
From 
    loans Left Join 
    users borrower On borrower.id = loans.borrower_id Left Join 
    users lender On lender.id = loans.lender_id 
Where 
    lender.phone = '12345678' or borrower.phone = '12345678' 

预计产量为

amt, 
date, 
pay_period, 
borrower_phone, 
borrower_name, 
lender_phone, 
lender_name, 

这个返回结果只有lender.phone =“12345678”,但如果我加入borrower.phone =“12345678”,它并不适用于这个相同的电话返回结果作为借款人

任何意见可以理解

+0

它看起来像你修剪了表格信息,所以我们不必筛选一堆额外的信息(谢谢),但是你引用了一些不在你的表格中的字段。既然你没有收到错误,我猜'loan.borrower_id','loans.lender_id'和'users.id'确实存在但是没有列出? – Windle

+0

我已添加它们。 – Smith

+2

我的建议是发布每个表的一些示例数据以及查询的所需结果。 – Taryn

回答

1

您的查询是正确的。你可能想看看你是如何填充底层表中的数据的。如果您使用SELECT语句作为在某些GUI中直接编辑的表格,可能会对如何创建2个不同的用户行来存储数据感到困惑。

反正我重构你的例子在MySQL中,填充2个表如下:

insert into `users` (name, phone) values ('Borrower01', '123456789'); 
insert into `users` (name, phone) values ('Borrower02', '234567890'); 
insert into `users` (name, phone) values ('Borrower03', '345678901'); 
insert into `users` (name, phone) values ('Borrower04', '456789012'); 

insert into `users` (name, phone) values ('Lender03', '123456789'); 
insert into `users` (name, phone) values ('Lender04', '234567890'); 
insert into `users` (name, phone) values ('Lender01', '345678901'); 
insert into `users` (name, phone) values ('Lender02', '456789012'); 

insert into loans (amt,date,pay_period,borrower_id,lender_id) 
values (100.00, '2013-04-01', '2013-04-15',1,7) 

insert into loans (amt,date,pay_period,borrower_id,lender_id) 
values (100.00, '2013-04-01', '2013-04-15',2,8) 

insert into loans (amt,date,pay_period,borrower_id,lender_id) 
values (100.00, '2013-04-01', '2013-04-15',3,5) 

insert into loans (amt,date,pay_period,borrower_id,lender_id) 
values (100.00, '2013-04-01', '2013-04-15',4,6) 

因此,贷款1和3应该由你的查询返回。

Select 
    loans.amt, 
    loans.date, 
    loans.pay_period, 
    borrower.phone As borrower_phone, 
    borrower.name As borrower_name, 
    lender.phone As lender_phone, 
    lender.name As lender_name 
From 
    loans Left Join 
    users borrower On borrower.id = loans.borrower_id Left Join 
    users lender On lender.id = loans.lender_id 
Where 
    lender.phone = '123456789' 
    or 
    borrower.phone = '123456789' 

这回:

amt, date, pay_period, borrower_phone, borrower_name, lender_phone, lender_name 
100, 2013-04-01, 2013-04-15, 123456789, Borrower01, 345678901, Lender01 
100, 2013-04-01, 2013-04-15, 345678901, Borrower03, 123456789, Lender03 

所以,查询是否已正确形成。检查你的数据。

+0

谢谢,我发现数据中有一个错字。谢谢 – Smith

相关问题