【问题标题】:SQL query that will retrieve multiple records when only one meets the criteria当只有一条满足条件时将检索多条记录的 SQL 查询
【发布时间】:2016-05-19 22:23:00
【问题描述】:

我有一个表,每个帐户都有多条记录,每条记录都有一个带有余额的单位#。如果其中一个单位的余额为负,我想选择该帐户并返回该帐户的所有记录,包括具有负单位的记录。例如:Acct # 1234 有两条记录(每条记录都有不同的 unit# 和 balance)。一个单位有负余额,一个单位有正余额。我想检索一个单位为负数的任何帐户的两个单位记录。 我将如何做到这一点?

【问题讨论】:

  • 什么数据库系统?
  • 1. @TomH 说了什么。 2. 你用的是什么关系型数据库?
  • 我是 sql 新手,所以到目前为止一无所获。到目前为止,我只编写了简单的查询,所以我不知道嵌套查询或 CTE 是否可以工作或如何编写代码。
  • 使用 Microsoft SQL Server 2008
  • 能否提供表结构?

标签: sql


【解决方案1】:

不知道您到目前为止尝试了什么以及您指的是什么数据库系统:这里有一个帮助。 使用限制Accts 的条件执行子查询,然后将其馈送到父查询以检索所有相关记录。

刚刚看到您提到了 SQL Server 2008。我喜欢 EXIST 子句的答案,但有时一个简单的子查询 IN 子句会给您更多选择:

    Select * 
    from yourAccountTable a
    where a.Acct IN (select distinct a.Acct 
             from yourAccountTable b
             where b.unitBalance < 0)

【讨论】:

  • 哇,很多提示!谢谢,我会试一试,让你知道。
  • @Tina 肯定会标记出最适合您的答案。
  • 抱歉回复延迟,不在办公室。我能够使用 Joachim 的建议进行以下查询。非常感谢!
【解决方案2】:

一个简单的IN 将在标准SQL 中完成;

SELECT * FROM myTable 
WHERE account_id IN (
    SELECT account_id FROM myTable WHERE balance < 0
)

【讨论】:

    【解决方案3】:

    我不知道你的表结构给你一个更准确的查询,但是你可以用一个简单的WHERE EXISTS来做到这一点:

    Select  *
    From    YourTable   A
    Where Exists
    (
        Select  *
        From    YourTable   B
        Where   A.AccountNo = B.AccountNo
        And     B.Balance < 0
    )
    

    这将带回 AccountNo 的任何余额记录为负值的记录。

    【讨论】:

      【解决方案4】:

      试试这个方法:

      Select * 
        from yourAccountTable a
       where EXISTS (select 1 
                       from yourAccountTable b
                      where a.accID = b.accId
                        and b.unitBalance < 0 )
      

      子句exists 所做的是以布尔方式验证给定注册表(a.accID = b.accId)是否遵循某些条件,如果余额为负,则基本上是根据您的情况返回行的 JOIN 操作.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        • 2017-07-15
        • 1970-01-01
        相关资源
        最近更新 更多