SQL Server:仅在嵌套选择返回内容时选择

时间:2014-05-04 11:54:38

标签: sql sql-server stored-procedures nested

我正在尝试设置以下查询,以便它只选择DaysMov表(A)中的任何数据,如果嵌套的Select在Calendar表(B)中找到匹配的日期。 目前在这种情况下,它只返回" dayMov"但仍然从表A中选择其他数据。

有人可以告诉我如何实现这一目标,例如:通过使用Where或Case?

SELECT      
            (
                SELECT      B.calendar_DT
                FROM        Calendar B
                WHERE       B.year_id = @selYear AND B.month_of_year = A.calMonth AND B.day_of_week = A.calDay AND (B.day_of_month BETWEEN A.calFrom AND A.calTill)
            ) AS dayMov,
            A.countries,
            A.regions,
            'variable' AS validity,
            A.name,
            A.desc,
            '' AS mode
FROM        DaysMov A
WHERE       A.mode = ''

非常感谢你提供任何帮助,蒂姆。

1 个答案:

答案 0 :(得分:4)

您应该可以使用内部联接执行相同的操作,例如:

SELECT      
        B.calendar_DT AS dayMov,
        A.countries,
        A.regions,
        'variable' AS validity,
        A.name,
        A.desc,
        '' AS mode
FROM    DaysMov A
INNER JOIN Calendar B ON B.year_id = @selYear AND B.month_of_year = A.calMonth AND B.day_of_week = A.calDay AND (B.day_of_month BETWEEN A.calFrom AND A.calTill)
WHERE   A.mode = ''

Calendar在指定条件下没有匹配时,此查询不会生成一行。假设你帖子中的查询有效(除了它产生了一些你不想要的行),上面的查询不应该产生额外的行,因为在相同条件下的子查询最多只返回一个结果。