2012-02-06 92 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申請人)