SQL 连接具有两个公共列的两个表 - 日期时间问题

SOK*_*SOK 1 sql t-sql sql-server join date

我在 SQL 中有两个表正在尝试连接。

表格1:

Date                             |        Name       |        Shoe_Size     |     Pay_method
2020-04-04 05:27:00.0000000      |    J.Bloggs       |         8            |      Credit
2020-04-04 05:55:00.0000000      |    J.Smith        |         10           |      Cash
2018-06-20 05:27:00.0000000      |    J.Bloggs       |         6            |      Cash
2018-08-15 05:55:00.0000000      |    J.Smith        |         9            |      Cash
Run Code Online (Sandbox Code Playgroud)

表2:

Date_ID                             |        Name       |        TShirt_Size 
2020-04-04 00:00:00.0000000         |    J.Bloggs       |         M
2020-04-04 00:00:00.0000000         |    J.Smith        |         L
2018-06-20 00:00:00.0000000         |    J.Bloggs       |         S
2018-08-15 00:00:00.0000000         |    J.Smith        |         M
Run Code Online (Sandbox Code Playgroud)

我想合并表格来显示:

 Date                            |        Name       |       Shoe_Size    |  TShirt_Size
2020-04-04 05:27:00.0000000      |    J.Bloggs       |         8          |       M
2020-04-04 05:55:00.0000000      |    J.Smith        |         10         |       L
2018-06-20 05:27:00.0000000      |    J.Bloggs       |         6          |       S
2018-08-15 05:55:00.0000000      |    J.Smith        |         9          |       M
Run Code Online (Sandbox Code Playgroud)

我尝试过的代码:

SELECT a.Date, a.Name, a.Shoe_Size, b.DATE_ID, b.Name, b.Tshirt_Size
From Table1 a, Table2.b
WHERE a.Name = b.Name
Run Code Online (Sandbox Code Playgroud)

但显然没有考虑日期维度。

我不确定如何获得的东西:

  1. 如何根据两个公共列(名称和日期)加入。

  2. 表 1 中的日期具有准确的时间,而表 2 中的日期仅具有正确的日期。每个名字每天只能有一个条目。

任何帮助将非常感激。

mar*_*c_s 5

试试这个 - 使用正确的ANSI JOIN,并仅比较日期(无时间部分):

SELECT 
    a.Date, a.Name, a.Shoe_Size, b.Name, b.Tshirt_Size
FROM 
    Table1 a
INNER JOIN 
    Table2 b ON a.Name = b.Name
             AND CAST(a.Date AS DATE) = CAST(b.Date_ID AS DATE)
Run Code Online (Sandbox Code Playgroud)