【问题标题】:The Subquery which returns multiple rows in Oracle SQL在 Oracle SQL 中返回多行的子查询
【发布时间】:2015-01-12 15:33:54
【问题描述】:

我有一个包含多个子查询的复杂 SQL 查询。查询返回一个非常大的数据。这些表格是动态的,并且每天都会更新。昨天,查询没有执行,因为其中一个子查询返回了多行。

子查询是这样的。

Select Value1 from Table1 where Table1.ColumnName = 123456

Table1.ColumnName 将被动态获取,不会被硬编码。 Table1.ColumnName 将从另一个完美运行的子查询中获取。

我的问题是,

  1. 如何查找特定子查询中的哪个值返回了两行。

【问题讨论】:

  • 不相关,但是:如果columnName 是数字列,则不要将其与字符串值进行比较 '123456' 是字符文字 123456 是数字

标签: sql oracle


【解决方案1】:

如何查找特定子查询中的哪个值返回了两行。

您需要检查每个子查询是否返回单行或多行的值。可以使用COUNT函数来验证-

select column_name, count(*) from table_name group by column_name having count(*) > 1

上面是子查询,它检查按每个值分组的行数,如果任何值返回多于一行,则该值是罪魁祸首。

一旦你知道哪个子查询和相应的列是罪魁祸首,你就可以使用ROWNUMANALYTIC 函数来限制行数。

【讨论】:

  • 嗨。感谢你及时的答复。我知道哪个子查询返回多行。我想知道该特定子查询中的哪个值正在获取两行。 Table1.ColumnName 的值实际上很大,它们是从另一个查询中动态获取的。查询将针对 100000 个值运行。
  • 就是我说的,要检查哪个值返回多行,需要执行count sql。您可以做的是,创建一个函数,将值动态传递给函数并捕获返回错误的值的异常。
  • 是的。尝试发布的查询。它准确地告诉您您的要求 - 它显示哪个值 (colum_name) 返回多于一行。如果您需要其他内容,可能需要进一步解释。
猜你喜欢
  • 1970-01-01
  • 2019-09-26
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
相关资源
最近更新 更多