我有一张表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
我已插入from_date_id, to_date_id, applied_dates_id
表中的leave_form
列,即所有日期都插入到leave_date
表中,从此表中我只是指{{1}进入date_id
表。
还有一个表格可以保留leave_form
和emp_code
。我的emp_name
表是:
personal
当我尝试从id(AI) emp_code(PK) emp_name
99 K0209 Nijo
表中获取from_date_id, to_date_id, applied_dates_id
列的日期时,我没有获得任何值。
我提取日期的查询是:
leave_form
它显示了我的结果:
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 :(得分:0)
我同意这个问题的一条评论。我建议直接在leave_form表中引用日期而不是FK到带日期的表。但回到这个问题。你还没有完全描述你的所有表格,所以我可以看到很多问题,但肯定有一个问题。
您的查询加入
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
这是不正确的。 leave_dates.dates是实际的DATE,而您加入的列(leave_form.from_date_id,leave_form.to_date_id,leave_form.applied_dates_id)是外键引用。
例如,1023不等于2016-02-18所以你得不到匹配。用以下内容替换上面的query-snippet将解决此特定问题。
{{1}}