【问题标题】:Nested SELECT using results from first SELECT使用第一个 SELECT 的结果嵌套 SELECT
【发布时间】:2019-10-01 01:25:40
【问题描述】:

我需要列出由其他客户推荐到书店的所有客户,列出每个客户的姓氏和进行推荐的客户#。

很简单,但我试图通过从同一个表和数据中列出推荐客户的名字和姓氏来添加到查询中。

被推荐的列是推荐他们的人的客户#。

SELECT lastname, a.referred || ' ' || a.firstname || ' ' || a.lastname "Referred By:"
  FROM customers 
    WHERE referred =
    (SELECT a.firstname, a.lastname FROM customers WHERE customer# = a.referred);

我的预期结果类似于

Lastname: Referred By:

Gina      1003 Leila Smith

收到此错误:

ORA-00904: "A"."LASTNAME": invalid identifier

00904. 00000 -  "%s: invalid identifier"

我认为我可能需要在 SELECT 子句本身中进行嵌套选择是否正确? 谢谢。

【问题讨论】:

  • 如果别名在同一个查询 FROM 子句中定义,则只能在 SELECT 子句中使用类似的别名。即 - SELECT alias_here.col FROM tab alias_here
  • 您可以left outer joincustomers 表将推荐信息返回到customers 表,也可以使用标量子查询检索选择列表中的详细信息。哪个对您的数据性能更高由您来测试。
  • 不可能这样做。请分享一些示例数据和预期结果,以便我们从头开始重写您的 SQL。
  • 您尚未在任何地方定义别名a。 ???

标签: sql oracle


【解决方案1】:

您可以自行加入表格。

假设customers 表有一个名为referred 的列,其中包含推荐客户的customer#

SELECT 
    c.lastname, 
    c.referred || ' ' || r.firstname || ' ' || r.lastname "Referred By:"
FROM customers c
INNER JOIN customers r ON r.customer# = c.referred

【讨论】:

  • 我其实不知道您可以自行加入表格,谢谢!这种方式也有效(:
  • 欢迎@Wesley!很高兴它有帮助。下次请用示例数据和预期输出记录您的问题,这样更容易理解和响应。
【解决方案2】:

使用 CONNECT BY 子句更容易 -

SELECT PRIOR lastname, 
       referred || ' ' || firstname || ' ' || lastname "Referred By:"
FROM customers
CONNECT BY PRIOR customer# = referred

【讨论】:

  • 关闭,但我需要它从同一个表中获取引用者的名称。这只是给我说姓氏推荐人:GIANA 1003 TAMMY GIANA 这是同名。
猜你喜欢
  • 2022-12-31
  • 2022-12-17
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 2015-03-21
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多