从mysql中选择两种方式

时间:2013-09-10 16:32:26

标签: php mysql sql

我需要从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

所以,如果我使用他的身份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'

请在输出中制作并编辑

我做错了什么?

2 个答案:

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

答案 1 :(得分: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 );