【问题标题】:Query Multiple Columns Within a Table查询表中的多个列
【发布时间】:2014-05-17 03:53:17
【问题描述】:

我有一张员工表格,格式如下:

EMPLOYEE (FNAME,MINIT,LNAME,SSN(PK),BDATE,SUPERSSN(NULLABLE))

我需要查询每个员工并检索以下信息:

FNAME(员工),LNAME(员工),SUPERSSN,(super)FNAME,(super)LNAME

更新

运行此查询后:

SELECT A.FNAME,A.LNAME,A.SUPERSSN,B.FNAME,B.LNAME 
FROM EMPLOYEE 
A LEFT JOIN EMPLOYEE B 
ON A.SUPERSSN = B.SSN;

结果很接近,但是当 superssn 为 null (CEO/Boss) 时,它会导致剩余的行也填充为 null,并且没有填充实际的主管 ssn。我正在尝试使用 IF 语句来解决 SuperSSN 为空的问题,但我收到错误:ORA-00905:缺少关键字。

下面是我运行的产生错误的查询。

SELECT A.FNAME,A.LNAME,A.SUPERSSN,B.FNAME,B.LNAME 
FROM EMPLOYEE A LEFT IF A.SUPERSSN <> 'NULL'
JOIN EMPLOYEE B ON A.SUPERSSN = B.SSN;

【问题讨论】:

  • @Tamil Selvan - 我并没有试图将其缩进为代码。它的唯一目的是简单参考我试图通过查询完成的事情。

标签: sql database oracle11g


【解决方案1】:
Select A.FName, 
       A.LNAme, 
       A.SuperSSN, 
       B.FName, 
       B.LName 
from Employee A 
Left Join Employee B
          On A.SuperSSN = B.SSN

【讨论】:

  • @ a jay gandhi - 我稍微清理了一下并运行它。 SELECT A.FNAME,A.LNAME,A.SSN,A.SUPERSSN,B.FNAME,B.LNAME FROM EMPLOYEE A LEFT JOIN EMPLOYEE B ON A.SUPERSSN = B.SSN; 它一直运行,直到遇到一个员工没有主管(老板)的行,然后对所有 B.FNAME 和 B.LNAME 产生空结果。
  • @Tamil Selvan - 除了监管语法之外,您还想帮忙做点什么吗?这将不胜感激。谢谢。
  • 那么,您不想显示那些没有主管的员工吗?如果是这种情况,那么您可以将 Left Join 替换为 Inner Join。- 谢谢
  • 没错。我还使用了 Inner Join,并检索到与以前类似的结果。我遇到的问题是,一旦处理了没有主管的员工,所有跟随的员工也显示没有主管。所以他们基本上被截断了。对我来说没有任何意义,所以我正在考虑创建一个视图并尝试以这种方式查询它。
  • 我想知道内连接如何产生与左连接相同的结果。就 If 语句而言,您可以尝试 SELECT A.FNAME,A.LNAME,A.SUPERSSN,B.FNAME,B.LNAME FROM EMPLOYEE A LEFT JOIN EMPLOYEE B ON A.SUPERSSN = B.SSN where A.SUPERSSN不为空
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多