如何在where子句

时间:2018-10-24 22:34:21

标签: sql sql-server join c#-4.0

我应该如何在子查询中使用别名才能从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 :(得分:0)

您不能为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'

答案 1 :(得分:0)

听起来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