【问题标题】:Compare with Date and ID problem比较日期和ID问题
【发布时间】:2023-12-22 02:40:01
【问题描述】:

表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

我也尝试了左外连接。它显示相同。如何比较 id 和 date。

需要查询帮助?

【问题讨论】:

  • 您确定您的数据正确吗?您描述的内部联接不会从该数据返回这些结果。仔细检查您的数据(我认为表 1 中的日期不正确。)
  • 不——非常相似,但这是一个不同的问题
  • @Philip - 他们总是没有清楚地阅读问题,只是他们像重复一样告诉。感谢您理解我的问题。
  • @Marc_S。这是我的输出。 AEAXC001 20080903 17:18:57 17:19:58 00:00:00 00:00:00 AEAXC001 20080903 17:18:57 17:19:58 09:00:00 17:00:00 看到我得到重复的值。

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


【解决方案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 中的单行合并,以此类推。

如果您在 Table2 中有多个具有相同 (ID,Date) 值的条目,您使用 INNER JOIN 获得重复项 - 这是设计使然,并不是错误 - 而只是INNER JOIN 的工作方式。

【讨论】: