【问题标题】:In PostgreSQL how do you join two tables select separate information在PostgreSQL中你如何连接两个表选择单独的信息
【发布时间】:2013-04-25 05:14:19
【问题描述】:

连接有问题。

我有一张桌子叫subjects

subno   subname
30006   Math
31445   Science
31567   Business

我还有一张名为enrollment的表

subno sno   
30009 980008
4134  988880

等等。

如何列出学生 9800007 的科目编号和科目名称?

【问题讨论】:

标签: sql postgresql join


【解决方案1】:

如果您想为没有注册的学生返回零行,请使用LEFT [OUTER] JOIN,例如:

SELECT e.sno, s.subno, s.subname
FROM enrollment e LEFT OUTER JOIN subjects s ON s.subno = e.subno
WHERE e.sno=988880;

要为没有注册的学生返回任何行,请使用INNER JOIN

SELECT e.sno, s.subno, s.subname
FROM enrollment e INNER JOIN subjects s ON s.subno = e.subno
WHERE e.sno=988880;

请注意,连接顺序对于外部连接很重要(RIGHT [OUTER] JOINLEFT [OUTER] JOIN - OUTER 关键字是可选的)但对于 INNER JOIN 不重要。出于这个原因,@swetha 的回答有一个问题:如果您要查找有关学生的信息,则加入顺序是相反的。

this SQLFiddle

【讨论】:

    【解决方案2】:

    试试这个

     select * 
     from subjects s 
       left join enrollment e on s.subno = e.subno  
     where sno=9800007 
    

    【讨论】:

    • 尝试使用内连接或直接连接
    • 我怀疑您的意思是要颠倒 LEFT OUTER JOIN 的顺序。在 cmets 中链接的 SQLFiddle 中尝试。
    • 希望这不会很痛苦,但在科目表中还有一个用于各种科目的配额列,例如数学 300,科学 400。如何列出配额小于学科平均配额的学科编号和名称。我必须计算招生表中的学生人数并进行比较吗?
    • @user2314197 请将其作为一个新问题发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2014-08-05
    • 2013-12-02
    相关资源
    最近更新 更多