2012-11-11 27 views
-1

我寫的「查找誰做只有一個小島嶼發展中國家保留」通過這樣與使用組查詢:查找誰做了一個預訂?

SELECT R.sid 
FROM Sailors S, 
     Reserve R 
WHERE R.sid = S.sid 
GROUP BY R.sid 
HAVING Count(R.sid) = 1 

但我想ALSA通過使用發現(不存在)command.I寫

SELECT S.sid 
FROM Sailors S 
WHERE NOT EXISTS (SELECT R.sid 
        FROM Reserve R 
        WHERE Count(R.sid) <> 1) 

但它有錯誤。如何使用not exists命令編寫它。

+0

'Reserve'的PK值是多少? –

回答

2

如果預約已擺脫一個主鍵,你可以把它寫像這樣:

Select 
    s.sid 
From 
    Sailors s 
    Inner Join 
    Reserve r 
    On s.sid = r.sid 
Where 
    Not Exists (
    Select 
     'x' 
    From 
     Reserve r2 
    Where 
     r2.sid = s.sid And 
     r2.rid != r.rid 
); 

注意,在這種情況下,你甚至都不需要引用水手錶:

Select 
    r.sid 
From 
    Reserve r 
Where 
    Not Exists (
    Select 
     'x' 
    From 
     Reserve r2 
    Where 
     r2.sid = r.sid And 
     r2.rid != r.rid 
); 

http://sqlfiddle.com/#!3/cce6c/2

+0

謝謝@ Laurence.And我可以通過不使用group by/having命令來編寫它。 – GokhanISIK

+0

@GokhanISIK我已經更新它不使用group by,但現在取決於具有主鍵的Reserve。 – Laurence

+0

我不明白你爲什麼使用「x」。你是什麼意思? – GokhanISIK