仅在加入

时间:2017-10-15 23:46:53

标签: mysql

我想加入两张桌子。我希望按特定日期(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'

但是出了点问题,我得不到正确的结果。任何人都可以帮我解决我错过的问题吗?

1 个答案:

答案 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

这似乎与我在测试时描述的方式一致。