3

我需要从 mysql 的贷款表中为特定用户选择所有交易我有两个表贷款和用户

贷款

id borrower_id lender_id amnt
1  1           2         10
2  1           3         5
3  2           1         2

为用户

id name
1  bill
2  gates
3  microsoft

所以如果我使用他的 id 1 选择账单,我应该得到这个预期的输出

输出

id uid name      borrower_id lender_id amnt
1  2   gates     1               2         
2  3   microsoft 1               3
3  2   gates     2               1

正如您在贷款表中看到的那样,用户可以借入或借出贷款这是我尝试过的

SELECT loans.*, users.name, users.id as uid 
From loans
   Left Join users On users.id = loans.lender_id 
   Left Join users On users.id = loans.borrower_id
Where
  (loans.lender_id = 2 ) Or (loans.borrower_id = 2 );

但我收到语法错误

#1066 - Not unique table/alias: 'users'

请我在输出中制作和编辑

我究竟做错了什么?

4

2 回答 2

4

当您使用同一张表编写JOIN查询时,您必须为其分配不同的别名。所以在这里你必须为users表使用不同的别名。如果存在相同的别名,那么 MySQL 很难区分用户表的两个别名。所以你必须手动分配不同的别名。

您必须检查每个不应该存在的表,NULL因为您使用同一个表两次。

SELECT 
   loans.*, 
   IF(ul.name = NULL, ub.name, ul.name) as name, 
   IF(ul.id = NULL, ub.id,ul.id) as uid 
FROM
   loans
LEFT JOIN 
   users ul ON users.id = loans.lender_id 
LEFT JOIN 
   users ub ON users.id = loans.borrower_id
WHERE 
   ul.id = 2 OR ub.id = 2;
于 2013-09-10T16:40:32.693 回答
1

当你多次加入同一个表时,你需要为它指定不同的别名,否则数据库引擎不知道你指的是哪一个。

您的 SQL 应该类似于

SELECT
    loans.*, IFNULL(ul.name, ub.name), IFNULL(ul.id, ub.id) as uid 
FROM
    loans
    LEFT JOIN users ul ON ul.id = loans.lender_id 
    LEFT JOIN users ub ON ub.id = loans.borrower_id
WHERE
    (loans.lender_id = 2 ) Or (loans.borrower_id = 2 );
于 2013-09-10T16:37:00.320 回答