代码之家  ›  专栏  ›  技术社区  ›  Ian Dallas

多个带有时间戳的表的左连接

  •  1
  • Ian Dallas  · 技术社区  · 15 年前

    好的SQL和Oracle专家我有一个有点复杂的查询,我正试图构建。

    select distinct person_info.person_name
         table2.value,
         table3.value,
         table4.value,
         table5.value
    from person_info
        left join table2 on table2.person_name=person_info.person_name
        left join table3 on table3.person_name=person_info.person_name
        left join table4 on table4.person_name=person_info.person_name
        left join table5 on table5.person_name=person_info.person_name;
    

    两个表的主键都是 person_name 还有一个 timestamp 人名 存在于一张桌子上然后我只想 left join

    1 回复  |  直到 15 年前
        1
  •  4
  •   user359040 user359040    15 年前

    尝试:

    select distinct person_info.person_name
         t2.value,
         t3.value,
         t4.value,
         t5.value
    from person_info
        left join (select t.*, row_number() over (partition by person_name order by timestamp_column desc) rowno from table2 t) t2 
             on t2.person_name=person_info.person_name and t2.rowno=1
        left join (select t.*, row_number() over (partition by person_name order by timestamp_column desc) rowno from table3 t) t3
             on t3.person_name=person_info.person_name and t3.rowno=1
        left join (select t.*, row_number() over (partition by person_name order by timestamp_column desc) rowno from table4 t) t4
             on t4.person_name=person_info.person_name and t4.rowno=1
        left join (select t.*, row_number() over (partition by person_name order by timestamp_column desc) rowno from table5 t) t5
             on t5.person_name=person_info.person_name and t5.rowno=1;