给定两个条件之间的联接两个表

时间:2020-07-07 08:50:54

标签: sql sql-server

我有2个表,一个是我的结果表,其中有一个“日期”列,另一个是“描述”。 另一个是我的配置表,其中有“开始日”,“开始月”和“结束日”,“结束月”。联接两个表的唯一方法是使用日期,其中表结果中的“日期”列必须在配置表的“开始”日期和月份与“结束”日期和月份之间。

T_Result | ID | 日期 说明

T_Configuration | ID | 描述 Begin_Day | Begin_Month | 结束日| 月末

我该怎么办?

3 个答案:

答案 0 :(得分:2)

答案以正确,明确,标准,可读的JOIN语法表示:

SELECT *
FROM T_Result r JOIN
     T_Configuration c
     ON DAY(r.Date) BETWEEN c.Begin_Day AND c.End_Day AND
        MONTH(r.Date) BETWEEN c.Begin_Month AND c.End_Month;

还请注意使用表别名来简化查询的编写。

答案 1 :(得分:1)

它适合SQL Server。注意括号!

SELECT * 
FROM [table_name_1]
INNER JOIN[table_name_2]
ON (strftime('%d',[table_name_1].Date) BETWEEN [table_name_2].[Begin-Day] AND [table_name_2].[End-Day])
AND (strftime('%m', [table_name_1].Date) BETWEEN [table_name_2].[Begin-Month] AND [table_name_2].[End-Month])

答案 2 :(得分:1)

假定Begin_Month和End_Month列为数字,

SELECT * FROM T_Result, T_Configuration 
WHERE 
(DAY(T_Result.Date) BETWEEN T_Configuration.Begin_Day AND T_Configuration.End_Day) AND
(MONTH(T_Result.Date) BETWEEN T_Configuration.Begin_Month AND T_Configuration.End_Month)