我想加入两张桌子。我希望按特定日期(CreateDate)内连接记录。我想要的是在没有任何东西可以加入时不记录。我按名称字段加入。对于特定日期(CreateDate),两个表中的名称应按1:1记录。如果不是我不想从第一张桌子或第二张桌子上单独记录。下面的例子来看一看。
for all tables:
Id - PK/AI
Name - varchar
FieldX/FieldY - varchar
CreateDate - Datetime
表1
ID | Name | FieldX | CreateDate
表2
ID | Name | FieldY | CreateDate
表3
ID | Name | FieldX | FIeldY | CreateDate
示例:
表1:
1 John value10 2017-09-03
2 Lili value20 2017-09-03
3 John value30 2017-10-12
4 Lili value40 2017-10-12
表2:
1 John value50 2017-09-03
2 Lili value60 2017-09-03
3 John value70 2017-10-12
4 Lili value80 2017-04-01
现在说我想加入一天2017-09-03
这应该是
表3:
John value10 value50 2017-09-03
Lili value20 value60 2017-09-03
白天:2017-10-12 请注意,当天表2中的Lili没有记录表示没有记录(反之亦然,如果不在表1中,并且在表2中也是相同的情况 - 我不想记录)
表3:
John value30 value70 2017-10-12
到目前为止我所拥有的是:
INSERT INTO Table3 (Name, FieldX, FieldY, CreateDate)
SELECT T1.Name, T1.FieldX, T2.FieldY, T1.CreateDate FROM Table1 As T1
INNER JOIN Table2 As T2 ON T1.Name=T2.Name
WHERE T1.CreateDate = '2017-10-12'
但是出了点问题,我得不到正确的结果。任何人都可以帮我解决我错过的问题吗?
答案 0 :(得分:1)
如果我没有误解您的问题,您希望两个表格记录按您提供的日期过滤。在这种情况下,您应该在WHERE
中为第二个表添加相同的条件。
像这样:
INSERT INTO Table3 (Name, FieldX, FieldY, CreateDate)
SELECT T1.Name, T1.FieldX, T2.FieldY, T1.CreateDate FROM Table1 As T1
INNER JOIN Table2 As T2 ON T1.Name=T2.Name
WHERE T1.CreateDate = '2017-10-12' AND T2.CreateDate = '2017-10-12'
在AND T2.CreateDate = '2017-10-12'
子句中注意WHERE
。
这似乎与我在测试时描述的方式一致。