我有一个存储过程,其中使用子查询,但问题是我的子查询返回 2 个值,并且我必须根据这两个值返回所有记录。
Select * from [Address] where AddressID=
(Select AddressID from PersonAddress where PersonID=
(select Claimant from [Case] where CaseID=35))
在此查询中,AddressID 返回两个值,并且这两个值都在表中记录,我必须返回两个地址。
我该如何解决这个问题?
代替
=
使用 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
您有两个选择:
使用 IN 子句,如下所示:
选择* 来自[地址] 在哪里 地址 ID 输入 ( 选择地址ID 来自个人地址 其中 PersonID IN(从 [Case] 选择索赔人,其中 CaseID=35) )
或使用 TOP 子句限制子查询
从[地址]中选择*,其中AddressID= (从 PersonAddress 中选择 TOP 1 AddressID,其中 PersonID= (从 [Case] 中选择 TOP 1 索赔人,其中 CaseID=35))
类似这样的:
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
)
)
我希望有某种方法可以检测子查询何时返回多个值,以便当子查询返回多个值时可以合并一个值。像下面这样的东西。我知道当 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