子查询返回多个值如何处理

问题描述 投票:0回答:4

我有一个存储过程,其中使用子查询,但问题是我的子查询返回 2 个值,并且我必须根据这两个值返回所有记录。

Select * from [Address] where AddressID=
(Select AddressID from PersonAddress where PersonID=
(select Claimant from [Case] where CaseID=35))

在此查询中,AddressID 返回两个值,并且这两个值都在表中记录,我必须返回两个地址。

我该如何解决这个问题?

sql sql-server-2005
4个回答
9
投票

代替

=
使用
IN
:

Select * from [Address] where AddressID IN
(Select AddressID from PersonAddress where PersonID IN
(select Claimant from [Case] where CaseID=35))

或者尝试

JOIN
,正确的方法:

Select * from Address a
inner join PersonAddress p on a.AdressID = p.AddressID
inner join Case c on p.PersonID = c.Claimant
where c.CaseID = 35

1
投票

您有两个选择:

  • 使用 IN 子句,如下所示:

    选择* 来自[地址] 在哪里 地址 ID 输入 ( 选择地址ID 来自个人地址 其中 PersonID IN(从 [Case] 选择索赔人,其中 CaseID=35) )

  • 或使用 TOP 子句限制子查询

    从[地址]中选择*,其中AddressID= (从 PersonAddress 中选择 TOP 1 AddressID,其中 PersonID= (从 [Case] 中选择 TOP 1 索赔人,其中 CaseID=35))


0
投票

类似这样的:

SELECT
    *
FROM
    [Address]
WHERE EXISTS
    (
        SELECT 
            NULL 
        from 
            PersonAddress
        WHERE
            PersonAddress.AddressID=[Address].AddressID
            AND EXISTS
                (
                    SELECT
                        NULL
                    FROM
                        [Case]
                    WHERE
                        [Case].CaseID=35
                        AND PersonAddress.PersonID=[Case].Claimant
                )
    )

0
投票

我希望有某种方法可以检测子查询何时返回多个值,以便当子查询返回多个值时可以合并一个值。像下面这样的东西。我知道当 Second_table 没有返回行时,下面的代码将返回“alternate”,但我希望 DB2 是否提供了类似于返回多行时的处理:

SELECT ID,COALESCE((SELECT 'primary' FROM secondary_table S WHERE S.ID = F.ID), '备用') AS PRIMARY_OR_ALTERNATE 来自 FIRST_TABLE F

© www.soinside.com 2019 - 2024. All rights reserved.