2013-04-29 47 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

相關問題