我有一个表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_codeemp_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/

10-10 22:05
查看更多