我正在尝试匹配来自不同表格的列,使用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
结果中应该只有一行,因为只有一行包含今天的日期。我哪里出错?
答案 0 :(得分: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)