2012-02-06 90 views
2

我有一个存储过程,其中我使用子查询,但问题是,我的子查询返回2值,我必须基于这两个值返回所有记录。如何处理,如果子查询返回多个值

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

在这个查询AddressID返回两个值和两个值在表中的记录,我必须返回这两个地址。

我该如何解决这个问题?

回答

5

代替=使用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 
+0

感谢的人,其工作正常选择*。 – LovingMVC 2012-02-06 08:40:32

+0

Roger that :)现在你应该投票并接受其中一个答案:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – 2012-02-06 08:45:48

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

感谢您的快速回复,它正常工作。 – LovingMVC 2012-02-06 09:05:43

0

你有两个选择:

  • 使用IN子句是这样的:

    从选择* [地址] 其中 AddressID IN ( 选择AddressID 从PersonAddress 其中是PersonID IN(从[案例]索赔其中CaseID = 35 ) )

  • 或TOP子句限制你的子查询

    从[地址],其中AddressID = (选择从PersonAddress TOP 1 AddressID这里是PersonID = (选择[案例]其中CaseID = 35)TOP 1申请人)