从同一个表中选择两种方式的记录?

时间:2013-05-20 17:22:02

标签: mysql sql join

我必须从两个表中选择记录,但是以某种方式组合它们,这是我的表

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”,则它不会返回与借用者相同的手机的结果

任何建议将不胜感激

1 个答案:

答案 0 :(得分: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

因此,您的查询已正确形成。检查您的数据。