mysql查询输出投影仪和白板

时间:2013-09-18 18:20:51

标签: mysql sql select distinct

我有这个小作业: 找那些有投影仪的房间,但不是白板。

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的房间没有显示出来。

2 个答案:

答案 0 :(得分:0)

尝试使用NOT IN()用于属于白板的房间

SELECT DISTINCT room, type
FROM Equipment
WHERE type = 'projector' AND room
 NOT IN (SELECT `room` FROM Equipment WHERE type = 'whiteboard' )

答案 1 :(得分: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)上添加索引以获得最佳效果。