我已经给出了这种关系方案并执行了以下任务:
内部加入:返回一份教授名单,其中给出了 ' lehrveranstaltung' ' fachbereich'名为' informatik'。 * print' vorname',' ho_name',' lv_name' *输出应按升序对姓氏进行排序,如果它们按降序排列相同 *相同的行应在线显示一次
现在我想出了以下查询:
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
我认为这对我有用(无法正确测试)。但是当我看到它时,我希望我能找到一个更好的解决方案,因为这对我来说看起来有点丑陋和错误。
这样做有什么方法吗? (必须使用内连接)
答案 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