sql内连接多个表

时间:2017-07-22 22:58:30

标签: sql inner-join

我已经给出了这种关系方案并执行了以下任务:

  

内部加入:返回一份教授名单,其中给出了   ' lehrveranstaltung' ' fachbereich'名为' informatik'。   * print' vorname',' ho_name',' lv_name'   *输出应按升序对姓氏进行排序,如果它们按降序排列相同   *相同的行应在线显示一次

enter image description here

现在我想出了以下查询:

select distinct
    v.vorname,
    h.ho_name,
    l.lv_name
    --print wanted, only once
from
    vorname v,
    hochschulangehoeriger h,
    lehrveranstaltung l
    -- from these tables
    inner join fachbereich f on f.fb_name = 'Informatik'
    -- only the 'informatik' events
    inner join prof_haelt_lv on l.lv_nr = pl.lv_nr
    -- make sure 'lehrveranstaltung' is from a professor
    inner join mitarbeiter mit on pl.pers_Nr = mit.pers_Nr
    -- make sure dude is a prof
where
    mit.ho_nr = h.ho_nr
    and
    mit.ho_nr = v.ho_nr -- give only names from prof
order by
    2 asc,
    3 desc; -- order rules

我认为这对我有用(无法正确测试)。但是当我看到它时,我希望我能找到一个更好的解决方案,因为这对我来说看起来有点丑陋和错误。

这样做有什么方法吗? (必须使用内连接)

1 个答案:

答案 0 :(得分:0)

根据您拥有的表,您可以使用以下SQL语句

SELECT DISTINCT v.vorname,
       h.ho_name,
       l.lv_name
  FROM vorname v
 INNER JOIN hochschulangehoeriger h
    ON v.ho_nr = h.ho_nr
 INNER JOIN mitarbeiter m
    ON m.ho_nr = h.ho_nr
 INNER JOIN fachbereich f
    ON f.fb_nr = m.fb_nr
   AND f.fb_name = 'Informatik'
 INNER JOIN lehrveranstaltung l
    ON l.fb_nr = f.nb_nr
 INNER JOIN professor p
    ON p.pers_nr = m.pers_nr
 INNER JOIN prof_haelt_lv pl
    ON pl.pers_nr = p.pers_nr
   AND pl.lv_nr = l.lv_nr
 ORDER BY 2, 
          3 DESC;

此外,关于SQL的这些部分,它与SQL中的任何表都没有连接

inner join fachbereich f on f.fb_name = 'Informatik'
-- only the 'informatik' events

你忘记了prof_haelt_lv的别名

inner join prof_haelt_lv on l.lv_nr = pl.lv_nr
-- make sure 'lehrveranstaltung' is from a professor