比较一个表中的重复行,并返回另一个表中的值

时间:2013-04-29 22:00:44

标签: sql oracle

我需要比较查询的同一个表中的行,并返回另一个表中id的匹配记录的结果。

以下是第一个表的示例:

id    checkin     checkout 
1     01/15/13    01/31/13   
1     01/31/13    05/20/13
2     01/15/13    05/20/13
3     01/15/13    01/19/13
3     01/19/13    05/20/13
4     01/15/13    02/22/13
5     01/15/13    03/01/13

我想只在今天的日期之后获得没有匹配记录的id表中的记录。因此,第二个记录结帐日期是在今天的日期之后,因此不会返回ID 1和3。然后我想将这些id与另一个表中的记录匹配,并从第二个表中返回值。

示例第二个表:

id    address     zip
1     abc         98734
2     uvx         12345
3     ;alksdf     12347
4     bhg         34567
5     ;alkjdf     56789

所以在这种情况下,我会返回id 4和5的地址和zip。

2 个答案:

答案 0 :(得分:3)

喜欢什么?

 SELECT *
 FROM table2 
 WHERE table2.id NOT IN (SELECT DISTINCT table1.id
                         FROM table1
                         WHERE table1.checkin > sysdate OR
                           table1.checkout > sysdate) AND
 table2.id IN (SELECT DISTINCT table1.id
               FROM table1)

编辑以排除将来有日期的人,并确保有相应的记录

答案 1 :(得分:2)

只获取今天或更早的记录,请执行以下操作:

where checkout <= trunc(sysdate)

编辑从此处开始

要在将来退出包含结帐日期的记录,请执行以下操作:

where not exists
(select 1 record
from yourTable t2
where checkout > trunc(sysdate + 1)
and t2.id = yourTable.id
)