比较一个表中的重复行,并返回另一个表中的值
我需要比较查询的同一个表中的行,并返回另一个表中的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
喜欢的东西?
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)
编辑以排除那些在将来的日期,以及确保有相应的记录
可能想再次阅读这个问题,关于今天的日期之后没有匹配记录的部分? – 2013-04-29 22:41:05
oops,由于某种原因,只读,编辑 – hrezs 2013-04-29 22:57:26
这不会返回sysdate之前的每个记录,而不仅仅是sysdate之后没有另一个记录的那些记录? – trueinViso 2013-04-29 23:12:37
从今天只得到这些记录或更早的版本,这样做:
where checkout <= trunc(sysdate)
编辑从这里开始
要排除将来有结帐日期的记录,请执行以下操作:
where not exists
(select 1 record
from yourTable t2
where checkout > trunc(sysdate + 1)
and t2.id = yourTable.id
)
我不希望那些记录,如果该id有另一个记录与系统日期后签出 – trueinViso 2013-04-29 23:07:58
这似乎是可行的,但它没有。如果我将此语句添加到where子句,它将不会返回任何记录,因为在今天的日期之后,存在一个包含结帐的记录。也许我需要做一些内部连接?我不熟悉SQL。 – trueinViso 2013-04-30 17:25:43
你知道如何连接表吗? – 2013-04-29 22:44:05