Как использовать псевдоним для подзапросов в предложении where - PullRequest
0 голосов
/ 25 октября 2018

Как использовать псевдоним в подзапросе, чтобы получить столбцы из subquery?

select R.date, M.bcr from MMS M 
where M.CampaignID in 
(
SELECT MR.CampaignID
FROM [Snipp_Receipts].[dbo].[MMS_Receipts] MR 
where MR.CampaignID = '0ab109b5'
) R

ПРИМЕЧАНИЕ : CampaignID - это внешний ключ в обоихстолы.

Как мне этого добиться?inner join дает больше записей.У subquery есть 136 записей, и я должен получить другие поля в MMS table, соответствующие только соответствующим subquery записям.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Похоже, отдельные записи в MMS объединяются с несколькими записями в MMS_Receipts.Можете ли вы объединить результаты MMS_Receipts?Вот как то так:

SELECT
 M.bcr
,max(MR.date) as [date]
FROM MMS M
INNER JOIN [Snipp_Receipts].[dbo].[MMS_Receipts] MR 
ON M.CampaignID = MR.CampaignID
WHERE M.CampaignID = '0ab109b5'
GROUP BY M.bcr
0 голосов
/ 25 октября 2018

Вы НЕ используете псевдоним подзапроса, используемого внутри IN(...), и НЕ МОЖЕТЕ ссылаться на столбцы этой таблицы в предложении select.Для этого вам нужно JOIN.

SELECT
    M.*
FROM MMS M
WHERE M.CampaignID IN (
    SELECT
        MR.CampaignID
    FROM [Snipp_Receipts].[dbo].[MMS_Receipts] MR
    WHERE MR.CampaignID = '0ab109b5'
    ) /* NO alias allowed here */

используйте внутреннее соединение

SELECT
    M.*
  , MR.date
FROM MMS M
INNER JOIN [Snipp_Receipts].[dbo].[MMS_Receipts] MR ON M.CampaignID = MR.CampaignID
WHERE M.CampaignID = '0ab109b5'
...