2013-03-17 27 views
0

我想匹配不同表中的列,使用SYSDATE將它們匹配到今天的日期。輸出實際上是在所有行上用當天日期填充日期列,而不是實際上具有今天日期的一行。Oracle Sql匹配日期列到sysdate錯誤

SELECT building.building_code, 
    building.building_name, 
    room_booking.booking_date 
FROM building, 
    room_booking, 
    dual 
WHERE to_date(booking_date) = trunc(sysdate) 

輸出爲:

BUILDING_CODE BUILDING_NAME BOOKING_DATE 
------------- --------------- ------------ 
A    ARCADIA   <17-mar-13> 
B    BELIZE   <17-mar-13> 
C    CAMDEN   <17-mar-13> 
D    DENVER   <17-mar-13> 
E    EXETER   <17-mar-13> 
F    FORT PORTAL  <17-mar-13> 
G    GRAMPIAN  <17-mar-13> 
H    HELVITICA  <17-mar-13> 
I    INVICTA   <17-mar-13> 
J    JULIET   <17-mar-13> 

10 rows selected 

應該有隻有一個結果行,因爲只有1與今天的變化更新了一行。我哪裏錯了?

+2

您需要兩個表上的連接條件(並且不需要'dual')。 – Mat 2013-03-17 14:24:27

+0

感謝墊 - 雙現在刪除 – 2013-03-17 15:07:29

+1

爲什麼你有'TO_DATE'在'booking_date'附近?它是一個字符串嗎? – 2013-03-18 06:20:47

回答

1

這是因爲你沒有加入表room_bookingbuilding,生產笛卡爾產品。

SELECT 
    b.building_code, 
    b.building_name, 
    r.booking_date 
FROM building b 
     JOIN room_booking r /* missing join condition here: ON r.building_code = b.building_code */ 
WHERE 
    TO_DATE(r.booking_date) = TRUNC(SYSDATE) 
+0

感謝Sebas,這個工作完美 - :) – 2013-03-17 15:08:03

+2

注意隱含的日期格式轉換錯誤。如果會話執行'alter session set nls_date_format ='YYYY-MM-DD HH24:MI:SS';',此代碼將不起作用。您可能希望使用'TRUNC(r.booking_date)'而不是'TO_DATE(r.booking_date)''。 – 2013-03-18 00:28:46