与日期和ID问题进行比较

时间:2009-10-06 16:10:19

标签: sql sql-server tsql sql-server-2000

表1

ID Date Intime Outtime

A001   20000501 12:00:00 22:00:00
A001   20000502 14:00:00 22:00:00
A001   20000503 12:00:00 23:00:00
A002   20000501 11:00:00 20:00:00
A002   20000502 13:00:00 21:00:00

所以......,

Table2

ID Date Intime Outtime

A001 20050501 14:00:00 23:00:00
A002 20050501 08:00:00 16:00:00

从上表

我想从Table1.ID = Table2.ID和Table1.Date = Table2.Date

上的Table1 Inner Join Table2中获取Table1.ID,Table1.Date,Table2.Intime,Table2.Outtime

获取重复值

ID Date Intime Outtime

A001   20000501 14:00:00 23:00:00
A001   20000501 18:00:00 16:00:00
A002   20000501 14:00:00 23:00:00
A002   20000501 18:00:00 16:00:00

我也试过了Left outer Join。它显示了同样的情况。如何比较id和日期。

需要查询帮助吗?

1 个答案:

答案 0 :(得分:1)

如果你进行内连接,你将只获得两个表中存在的那些行(就其ID和日期而言):

SELECT 
  Table1.ID, Table1.Date, 
  Table2.Intime, Table2.Outtime 
FROM Table1 
INNER JOIN Table2 ON Table1.ID = Table2.ID AND Table1.Date = Table2.Date

ID     Date       InTime   OutTime
A001   20000501   14:00:00 23:00:00
A002   20050501   08:00:00 16:00:00

如果你没有得到这个,那么你的数据就会出现问题 - 正如我在上一个问题的回答中已经提到的那样。

检查此查询的输出:

SELECT * FROM Table2 WHERE ID = 'A001' AND Date = '20000501'

我打赌你会得到不止一排......

马克

试图进一步解释 - 我仍然认为你误解了INNER JOIN,或者你正在努力完成一些无法轻易完成的事情。

您的输出是这样的:

ID Date Intime Outtime

A001   20000501 14:00:00 23:00:00
A001   20000501 18:00:00 16:00:00
A002   20000501 14:00:00 23:00:00
A002   20000501 18:00:00 16:00:00

如果您真正从INNER JOIN获得此输出,则表示:

  • 您最希望在Table1
  • 中有一行ID=A001Date=20000501
  • 您的Table2中有两行(或更多)行ID=A001Date=20000501

INNER JOIN将做的是将Table2中的第1行与Table1中的单行组合,然后将Table2中的第2行与Table1中的单行组合,依此类推。

如果表2中有多个具有相同(ID,日期)值的条目,则通过INNER JOIN获得重复 - 这是设计上的,并不是错误 - 而只是INNER JOIN的工作方式。