2016-04-01 12 views
1

私はのように見えるテーブルleave_formを持っている:この結合クエリはどのように実行しますか?

type  id reporting_id leave_bal from_date_id leave_from to_date_id leave_to number leave_for status applied_dates_id pendays 
personal 99 6   10  1023   full day 1313  full day 10  personal yes 1026    null 

私はleave_formにこれらの日付を参照できるように、私は、日付の別のテーブルを持っています。私leave_dateの表は、次のようになります。

date_id(AI) dates(UK) 
1025  2016-02-18 
1301  2016-02-20 
1218  2016-02-16 

このdate_id私は私が唯一leave_formテーブルにdate_idを参照しています、すなわち、すべての日付がleave_dateテーブルに挿入されているleave_form表にし、このテーブルからfrom_date_id, to_date_id, applied_dates_idの列に挿入されています。

emp_codeemp_nameを保持するテーブルもあります。私personal表には、次のとおりです。

id(AI) emp_code(PK) emp_name 
99  K0209   Nijo 

私は任意の値を得ることはありませんleave_formテーブルからfrom_date_id, to_date_id, applied_dates_id列の日付を取得しようとしていた場合。日付を取得するための

私のクエリは次のとおりです。私はこのクエリを実行していたときに何もデータが返されないます

type, emp_code, rm_id, rm_name, leave_bal, from_date, leave_from, to_date, leave_to, number, leave_for, status, applied_date, pendays 

すなわち:

select g.type, a.emp_code, h.rm_id, h.rm_name, g.leave_bal, i1.dates as from_date, 
    g.leave_from, i2.dates as to_date, g.leave_to, g.number, g.leave_for, g.status, 
    i3.dates as applied_date, g.pendays 
    from personal a 
    inner join leave_form g 
    on a.id = g.id 
    inner join inform_to_rm h 
    on h.reporting_id = g.reporting_id 
    inner join leave_dates i1 
    on i1.dates = g.from_date_id 
    inner join leave_dates i2 
    on i2.dates = g.to_date_id 
    inner join leave_dates i3 
    on i3.dates = g.applied_dates_id 
    where a.emp_code = 'K0209'; 

それはように私は結果を示しています。

+0

"Left join leave_form g"のように左にジョイントしようとします。なぜなら、内部joinは結果が一致していれば2つのテーブルが一致した値を返すからです。それ以外の場合は何も返しません。 – cfprabhu

+1

サイド質問:leave_formテーブルに日付を入れるのではなく、なぜこのdate_id構造を使用しますか? – Burki

+0

私は左の結合を行っていますが、from_date、to_date、applied_dateの日付は返していません。私は、date_idとleave_datesテーブルとleave_formテーブルを比較することで、日付を返す必要があります。 –

答えて

0

私は質問に対するコメントの1つに同意します。 FKの代わりにleave_formテーブルで日付を直接参照することをお勧めします。しかし、質問に戻る。あなたはすべてのテーブルを完全に記述していないので、私は見ることができない複数の問題がある可能性がありますが、間違いなく1つの問題があります。

あなたのクエリがこれは間違ってい

inner join leave_dates i1 
    on i1.dates = g.from_date_id 
inner join leave_dates i2 
    on i2.dates = g.to_date_id 
inner join leave_dates i3 
    on i3.dates = g.applied_dates_id 

に合流します。 leave_dates.datesは実際のDATEであり、参加する列(leave_form.from_date_id、leave_form.to_date_id、leave_form.applied_dates_id)は外部キー参照です。

たとえば、1023は2016-02-18に等しくないため、一致しません。上記のクエリスニペットを次のものに置き換えると、この特定の問題が修正されます。

inner join leave_dates i1 
    on i1.date_id = g.from_date_id 
inner join leave_dates i2 
    on i2.date_id = g.to_date_id 
inner join leave_dates i3 
    on i3.date_id = g.applied_dates_id 
+0

ty @Nathan kummer。このクエリが機能する –

関連する問題