2013-03-17 2 views
0

Я пытаюсь сопоставить столбцы из разных таблиц, сопоставляя их с сегодняшней датой, используя SYSDATE. Вывод фактически заполняет столбец даты сегодняшней датой во всех строках, а не только одной строкой, которая фактически имеет сегодняшнюю дату.Oracle Sql столбец даты сопоставления для sysdate error

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 

Там должна быть только одна строка в результате как есть только одна строка с текущей датой в нем. Где я ошибся?

+2

Вам необходимо условие соединения на ваших двух таблицах (и вам не нужно «dual»). – Mat

+0

Спасибо Mat - dual удален сейчас –

+1

Почему у вас есть 'TO_DATE' вокруг' booking_date'? Это строка? –

ответ

1

Это потому, что вы не присоединяетесь к столам room_booking и building, производя деформированный продукт на нем.

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, что отлично работает - :) –

+2

Следите за неявными ошибками преобразования формата даты. Этот код не будет работать, если сеанс выполняет 'alter session set nls_date_format = 'YYYY-MM-DD HH24: MI: SS';'. Вероятно, вы хотите использовать 'TRUNC (r.booking_date)' вместо 'TO_DATE (r.booking_date)'. –