我正在尝试设置以下查询,以便它只选择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 = ''
非常感谢你提供任何帮助,蒂姆。
答案 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
在指定条件下没有匹配时,此查询不会生成一行。假设你帖子中的查询有效(除了它产生了一些你不想要的行),上面的查询不应该产生额外的行,因为在相同条件下的子查询最多只返回一个结果。