3

MySQL のローン テーブルから特定のユーザーのすべてのトランザクションを選択する必要があります。ローンとユーザーの 2 つのテーブルがあります。

ローン

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'

Plsは私が作成し、出力で編集します

私は何を間違っていますか?

4

2 に答える 2

4

同じテーブルを使用してJOINクエリを作成する場合は、別のエイリアスを割り当てる必要があります。そのため、ここではusersテーブルに別のエイリアスを使用する必要があります。同じエイリアスがある場合、MySQL がユーザー テーブルの両方のエイリアスを区別するのは困難です。そのため、別のエイリアスを手動で割り当てる必要があります。

NULL同じテーブルを 2 回使用しているため、存在してはならない各テーブルを確認する必要があります。

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 に答える