2013-04-29 65 views
2

我需要比较查询的同一个表中的行,并返回另一个表中的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

+0

你知道如何连接表吗? – 2013-04-29 22:44:05

回答

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) 

编辑以排除那些在将来的日期,以及确保有相应的记录

+0

可能想再次阅读这个问题,关于今天的日期之后没有匹配记录的部分? – 2013-04-29 22:41:05

+0

oops,由于某种原因,只读,编辑 – hrezs 2013-04-29 22:57:26

+0

这不会返回sysdate之前的每个记录,而不仅仅是sysdate之后没有另一个记录的那些记录? – trueinViso 2013-04-29 23:12:37

2

从今天只得到这些记录或更早的版本,这样做:

where checkout <= trunc(sysdate) 

编辑从这里开始

要排除将来有结帐日期的记录,请执行以下操作:

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

我不希望那些记录,如果该id有另一个记录与系统日期后签出 – trueinViso 2013-04-29 23:07:58

+0

这似乎是可行的,但它没有。如果我将此语句添加到where子句,它将不会返回任何记录,因为在今天的日期之后,存在一个包含结帐的记录。也许我需要做一些内部连接?我不熟悉SQL。 – trueinViso 2013-04-30 17:25:43

相关问题