我有一个表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
表中,并且从该表中我仅将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';
它显示了如下结果:
type, emp_code, rm_id, rm_name, leave_bal, from_date, leave_from, to_date, leave_to, number, leave_for, status, applied_date, pendays
即我执行此查询时没有数据返回。
最佳答案
我同意对该问题的评论之一。我建议直接在Leave_form表中而不是FK引用具有日期的表中的日期。但是回到问题。您尚未完全描述所有表,因此可能有多个我看不到的问题,但是肯定有一个问题。
您的查询加入
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
关于mysql - 如何执行此联接查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36349727/