【发布时间】:2016-04-01 06:46:49
【问题描述】:
我有一张桌子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 表中的from_date_id, to_date_id, applied_dates_id 列中,即所有日期都插入到leave_date 表中,从这个表中我只是将date_id 引用到leave_form 表中。
还有一个表格保存emp_code 和emp_name。我的personal 表是:
id(AI) emp_code(PK) emp_name
99 K0209 Nijo
当我尝试从 leave_form 表中获取 from_date_id, to_date_id, applied_dates_id 列的日期时,我没有得到任何值。
我获取日期的查询是:
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
即当我执行此查询时没有返回数据。
【问题讨论】:
-
您将尝试像“Left join leave_form g”一样左加入。因为内连接仅在两个表具有匹配值时才返回结果,否则它什么都没有返回任何东西
-
一个附带问题:为什么要使用这个 date_id 构造而不是简单地将日期放在 leave_form 表中?
-
我已经完成了左连接,但它没有返回 from_date、to_date、applied_date 的日期。我希望通过将 date_id 与 leave_dates 表和 leave_form 表进行比较来返回日期。
-
真的是每个员工只能有一个leave_form吗?
标签: mysql inner-join