Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从同一个表中双向选择记录?_Mysql_Sql_Join - Fatal编程技术网

Mysql 从同一个表中双向选择记录?

Mysql 从同一个表中双向选择记录?,mysql,sql,join,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

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

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”的结果,但如果我添加借款人。phone=“12345678”,则不会返回与借款人相同的电话的结果


如有任何建议,我们将不胜感激

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

无论如何,我在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

因此,您的查询格式正确。检查您的数据。

看起来您已精简了表信息,因此我们不必筛选大量额外信息(谢谢),但您在查询中引用了一些不在表中的字段。既然您没有收到错误,我猜
loans.borrower\u id
loans.leander\u id
users.id
确实存在,但只是没有列出?我的建议是为每个表发布一些示例数据和所需的查询结果。@Smith。您的查询在检索贷款人或借款人与该电话号码匹配的数据时看起来是正确的。因此,我得出结论,我不明白你真正想要什么。按照蓝脚军团的建议,发布带有预期结果的样本数据。您的查询似乎是正确的。除了这两个条件外,
WHERE
子句中还有其他条件吗?如果是,请尝试在这2个括号中插入:
Where(lender.phone='12345678'或borrower.phone='12345678'),然后。。。其他条件