0

我需要创建一个可能使用 MINUS 的 Oracle SQL 查询

Booking(BookID, MotelID, ClientID, Date)
Motel(MotelID, MotelName)
Client(ClientID, ClientName)

我可以显示住过任何一家汽车旅馆的客户的名字(我想!!!)

SELECT DISTINCT ClientName
FROM   (Client INNER JOIN Booking
ON     Client.ClientID = Booking.ClientID)
     INNER JOIN Motel
     ON Booking.MotelID = Motel.MotelID
WHERE (MotelName = 'MotelOne' OR MotelName='MotelTwo');

但是我现在需要向那些住在MotelOne 但不是MotelTwo 的客户展示。

对此非常陌生,并试图让我的头脑围绕它,所以任何帮助都将被感激地接受!

4

1 回答 1

3

Oracle 有一个 MINUS 运算符 --> http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm
它只返回第一个查询返回的唯一行,而不返回第二个查询。

SELECT c.clientid, c.clientname
  FROM booking b JOIN client c
    ON b.clientid = c.clientid JOIN motel m
    ON b.motelid = m.motelid
 WHERE m.motelname = 'MotelOne'
MINUS
SELECT c.clientid, c.clientname
  FROM booking b JOIN client c
    ON b.clientid = c.clientid JOIN motel m
    ON b.motelid = m.motelid
 WHERE m.motelname = 'MotelTwo'

MINUS 运算符对行进行排序并消除重复项,因此不需要 SELECT DISTINCT。

于 2013-08-17T07:30:33.937 回答