Select 关于他在 SQL*Plus 中的预订的客户信息

Select client informations about his reservation in SQL*Plus

我想显示过去两个月没有任何预订的客户的姓名、地址和phone电话号码。

表格是:

CLIENT (
 ClientNo,
 Name,
 Sex,
 DOB,
 Address,
 Phone,
 Email,
 Occupation,
 MaritalStatus,
 Spouse,
 Anniversary
)
RESERVATION 
 ResNo,
 ResDate,
 NoOfGuests,
 StartDate,
 EndDate,
 ClientNo,
 Status
)

我试过了:

SELECT Name, Address, Phone, ResNo
FROM Client C, Reservation R
WHERE Date_Column >= ResDate R(MONTH, -3, GETDATE())
ORDER BY Name DESC

尽量让你的 where 条件像

ResDate >= add_months(TRUNC(SYSDATE) + 1, 2)

您还缺少 table 的 JOIN。所以你需要把 JOIN 放在

 SELECT C.Name, C.Address, C.Phone, R.ResNo, R.ResDate
 FROM Client C INNER JOIN Reservation R ON C.ID = R.ID   --Change the column for Joing as per your table structure
 WHERE R.ResDate >= add_months(TRUNC(SYSDATE) + 1, 2)) 
 ORDER BY Name ASC;

你需要一个outer join,所有的条件都在join里面,然后过滤掉所有成功的join:

SELECT C.*
FROM Client C
LEFT JOIN Reservation R ON C.ID = R.ID -- outer join
  AND R.ResDate >= add_months(TRUNC(SYSDATE) + 1, 2) -- condition in join
WHERE R.ID IS NULL -- only return missed joins
ORDER BY Name ASC

您想要错过的加入 - 在给定条件的情况下根本没有保留的加入。这种错过的连接在连接的 table 的列中具有全空值,因此过滤这些列(其中之一)为空将 return 没有任何此类保留的客户。