Как работать, если подзапрос возвращает несколько значений - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть хранимая процедура, в которой я использую подзапрос, но проблема в том, что мой подзапрос возвращает 2 значения, и я должен вернуть все записи на основе этих двух значений.

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

В этом запросе AddressID, возвращающий два значения и оба значения, имеющие запись в таблице, я должен вернуть оба адреса.

Как я могу решить эту проблему?

Ответы [ 3 ]

6 голосов
/ 06 февраля 2012

Вместо = используйте 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 голос
/ 06 февраля 2012

У вас есть два варианта:

  • используйте предложение IN следующим образом:

    Выбрать * от [Адрес] где AddressID IN ( Выберите адрес от PersonAddress где PersonID IN (выберите Истца из [Case], где CaseID = 35) )

  • или ограничьте свои подзапросы предложением TOP

    Выберите * из [Адрес], где AddressID = (Выберите TOP 1 AddressID из PersonAddress, где PersonID = (выберите TOP 1 заявителя из [Case], где CaseID = 35))

0 голосов
/ 06 февраля 2012

Примерно так:

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
                )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...