【问题标题】:Multiple rows returned by a subquery used as an expression用作表达式的子查询返回的多行
【发布时间】:2012-05-11 09:55:22
【问题描述】:

我有以下查询,它在 Oracle 和 SQL Server 2008 上运行良好,但它似乎不能在 PostgreSQL 上运行。该查询旨在返回与给定条件匹配的记录计数。有人可以解释这个原因,并提供一个解决方案来解决如何修改这个查询以允许它产生预期的结果。

查询:

select count(*) 
from tma_notices 
where TNOT_NOTICE_TYPE ='0400' 
and TNOT_NOTICE_STATUS = 'OK' 
and tnot_notice_id >= 
    (
        select NOTICE_NUM_AT_MIDNIGHT 
        from RWOL_COUNTER_QUERY_TYPE 
        where QUERY_TYPE = 'START_NOTICES_TODAY' 
        and USER_NAME = 'PUBLIC'
    )

更新:此错误是由 PostgreSQL 数据库中不可预见的重复记录引起的。需要调查重复的来源。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    很明显,子查询可以返回一组行,而条件 tnot_notice_id >= 如果与一组行而不是单个值进行比较,则无效。

    您确定存在满足您的 where 条件的唯一记录吗?

    如果你想避免这种行为,我建议你使用tnot_notice_id >= ALL ( subquery )

    【讨论】:

    • 奇怪的是我刚刚检查了这个代码引用的表实际上有重复的记录,这导致了这个问题。这一定是在克隆数据库期间发生的。我将不得不进一步调查,但感谢您的回答。
    • @CSharpened:我认为至少对于 Oracle,如果子查询返回多于一行,原始查询也会失败。
    • @a_horse_with_no_name :我完全同意
    • 是的,问题是由数据库中的重复行引起的。为了在重新创建数据库之前暂时解决这个问题,我添加了一个独特的关键字它。远非理想,但允许我继续该项目,直到完成为止。
    • @CSharpened:感谢您提供的信息。一切都是为了增加经验
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2021-07-13
    • 2013-05-24
    • 1970-01-01
    相关资源
    最近更新 更多