如何执行此连接查询?

时间:2016-04-01 06:46:49

标签: mysql inner-join

我有一张表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_formemp_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';

,即执行此查询时不会返回任何数据。

1 个答案:

答案 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}}