我需要从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'
请在输出中制作并编辑
我做错了什么?
答案 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 );