2017-12-15 26 views
0

別のテーブルのデータの識別子として使用される2つの値( "user"と "assessor")を持つテーブル "テーブルA" 「表B」。 「表B」の範囲内では、既存のユーザーは誰でも評価者であり、他者を評価することができます。同じテーブルにつながる2つの外部キーを持つテーブルの問題

"user"と "assessor"が同じテーブルにリンクしているので、ユーザーと評価者を同時にフィルタリングしたい場合はテーブルBの検索を実行できません。以下はその意味です。

select `tableA`.* 
from `tableA` 
left join `tableB` on `tableA`.`user_id` = `tableB`.`id` 
left join `tableB` on `tableA`.`assessor_id` = `tableB`.`id` 
where LOWER(tableB.first_name) REGEXP "John" # user's name 
    AND LOWER(tableB.first_name) REGEXP "Bill" # assessor's name 

この問題をすばやく回避する方法はありますか、評価担当者専用の別のテーブルを作成する必要がありますか、または既存のユーザーテーブルをいくつかクローンする必要がありますか?

答えて

0

あなたが参加するテーブルに

SELECT `tableA`.* FROM `tableA` AS TA 
LEFT JOIN `tableB` AS TB1 ON TB1.id = TA.`user_id` 
LEFT JOIN `tableB` AS TB2 ON TB2.id = TA.`assessor_id` 
WHERE 
    LOWER(TB1.first_name) REGEXP "John" -- user's name 
    AND 
    LOWER(TB2.first_name) REGEXP "Bill" -- assessor's name 
を区別するために、テーブルの別名を使用して、別のマッピングに同じテーブルに参加しています
関連する問題