2016-06-23 3 views
0

こんにちは私は私のjoinステートメントにエイリアスを入れたいと思います。joinステートメントの中にエイリアスを入れる方法

私のコードは次のとおりです。

SELECT distinct id_no, '' as picture, concat(lastname, IF(LENGTH(firstname) > 0 OR LENGTH(middlename) > 0, ', ', ''), concat(IF(p.degree = 5, 'Dr. ', IF(p.degree = 6, 'Dr. ', IF(p.degree = 28, 'Dr. ', '')))), firstname, IF(LENGTH(middlename) > 0, CONCAT(' ', middlename), '')) as name, tp.profession, '' as cv, e.entry_date, e.termination_date 
FROM (bims_people as p) 

LEFT JOIN bims_people_education as bpe ON bpe.people_id = p.id_no 

LEFT JOIN tcms_profession as tp ON tp.profession_id = bpe.profession 

LEFT JOIN (select * from bims_people_employment_contract_data order by termination_date DESC) e ON e.people_id = p.id_no 

WHERE p.marked = 0 AND p.id_no > 1 GROUP BY p.id_no ORDER BY lastname ASC LIMIT 100, 50 ; 

と私はそれをこのようにしたい:

SELECT distinct id_no, '' as picture, concat(lastname, IF(LENGTH(firstname) > 0 OR LENGTH(middlename) > 0, ', ', ''), concat(IF(p.degree = 5, 'Dr. ', IF(p.degree = 6, 'Dr. ', IF(p.degree = 28, 'Dr. ', '')))), firstname, IF(LENGTH(middlename) > 0, CONCAT(' ', middlename), '')) as name, tp.profession, '' as cv, e.entry_date, e.termination_date 
FROM (bims_people as p) 

LEFT JOIN bims_people_education as bpe ON bpe.people_id = p.id_no 

LEFT JOIN tcms_profession as tp ON tp.profession_id = bpe.profession 

LEFT JOIN (select * from bims_people_employment_contract_data **where people_id = p.id_no** order by termination_date DESC limit 1) e ON e.people_id = p.id_no 

WHERE p.marked = 0 AND p.id_no > 1 GROUP BY p.id_no ORDER BY lastname ASC LIMIT 100, 50 ; 

私はp.id_noが不明であることを私に告げる保ちます。あなたはそれに参加するために別のテーブルを定義するには、テーブルの別名(相関名)を使用することはできません

+0

あなたはそのようなサブクエリを相関させることができません。私はグループごとに行番号を設定する必要があると思う(mysqlはこれに対してユーザー定義変数を使用することができる)。次にrn = 1でフィルターする。 – sgeddes

+0

あなたは構文の問題があると思う。 'SELECT DISTINCT id_no'、 'AS picture' 'SELECT DISTINCT id_no AS picture' –

+0

@jas - 構文に間違いはありません.2つの異なる列が選択されています'id_no'のための1つの列、' picture'のための1つの列。 'picture'カラムはすべての行で空白になります。 – sgeddes

答えて

0
LEFT JOIN (select * from bims_people_employment_contract_data 
    where people_id = p.id_no 
    order by termination_date DESC limit 1) e 
ON e.people_id = p.id_no 

。 2つのテーブルを指定した後、&のJOIN、ONまたはWHEREのエイリアスを条件に使用できます。

のMySQL 5.7リファレンスマニュアル14.2.10.8 Subqueries in the FROM Clause から:

JOIN操作のON句内で使用しない限り、FR​​OM句でサブクエリは、サブクエリを相関させることができません。

p.id_noがONまたはWHEREに表示されませんので、あなたが引用されOUTERを行うには、JOIN期待しますか?、それはのid_no値可能性があり、テーブルpのいかなる特定の行はありません。)

は、たぶん、あなたが欲しい:

LEFT JOIN (SELECT * FROM bims_people_employment_contract_data 
    WHERE (people_id, termination_date) IN 
     (SELECT people_id, MAX(termination_date) AS termination_date 
     FROM bims_people_employment_contract_data 
     GROUP BY people_id) 
    ) e 
ON e.people_id = p.id_no 
関連する問題