0

私はこの小さな課題を持っています: プロジェクターがあり、ホワイトボードがない部屋を見つけてください。

CREATE TABLE Equipment 
(
room VARCHAR(15),
type VARCHAR(20)
);

INSERT INTO Equipment VALUES ('Dreyer-201','projector');
INSERT INTO Equipment VALUES **('Zuse-127','projector');**
INSERT INTO Equipment VALUES ('Shannon-164','projector');
INSERT INTO Equipment VALUES ('Dreyer-201','whiteboard');
INSERT INTO Equipment VALUES **('Zuse-127','whiteboard');**
INSERT INTO Equipment VALUES ('Shannon-164','whiteboard');

これが私の答えです:

SELECT DISTINCT room, type
FROM Equipment
WHERE type = 'projector' AND NOT type = 'whiteboard'

そしてそれは機能していますが、私の出力には部屋Zuse-127がリストされています。プロジェクターとホワイトボードの両方で単独で使用できることはわかっていますが、この問題を解決するにはどうすればよいですか? そのため、Zuse-127 の部屋は表示されません。

4

2 に答える 2

0

自己結合は、GROUP BY またはサブクエリを使用したソリューションよりもはるかに優れたパフォーマンスを発揮する可能性があります。

SELECT e.room, e.type
FROM Equipment AS e
LEFT OUTER JOIN Equipment AS e2
 ON e.room = e2.room AND e2.type = 'whiteboard'
WHERE e.type = 'projector'
 AND e2.type IS NULL;

(type,room)最良の結果を得るには、インデックスを付けてください。

于 2013-09-18T18:29:46.157 に答える