-1

次のようにして、Usinggroupを使用して「1つの予約を行ったsidを検索する」クエリを記述します。

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

しかし、私は(存在しない)コマンドを使用してそれを見つけることもしたいです。私はそれを書きます

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

しかし、エラーがあります。notexistsコマンドを使用して書き込むにはどうすればよいですか。

4

1 に答える 1

2

Reserve に主キーのridedがある場合、次のように書くことができます:

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
  );

この場合、 Sailors テーブルを参照する必要さえないことに注意してください。

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

于 2012-11-11T11:37:31.503 に答える