如何在dataBases数据上获得差距

时间:2014-04-24 21:55:31

标签: mysql sql database select gaps-in-data

好吧,假设我有下表及其各自的值:

create table player(
name varchar(255),
level int
);

INSERT INTO player values ('Fighter', 4);
INSERT INTO player values ('Archer', 2);
INSERT INTO player values ('Assassin', 6);

我希望知道哪些级别低于较高级别没有玩家。

在这种情况下,我希望得到结果:(1,3,5)

我正在使用MYSQL,但任何数据库查询解决方案都可以帮助我解决。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以在使用查询时添加包含可能的级别选项的表 1)检查不存在具有相同级别的玩家记录,以及 2)将结果限制在低于最高可能值的水平。

这是一个例子。

CREATE TABLE levelOption (
    level int not null primary key
);

INSERT INTO levelOption ( level )
VALUES ( 1 ), ( 2 ), ( 3 ), ( 4 ) , ( 5 ), ( 6 ), ( 7 );

SELECT level
FROM levelOption 
WHERE NOT EXISTS (
        SELECT *
        FROM player
        WHERE player.level = levelOption.level
    )
     AND level < ( SELECT MAX(level) FROM player )
ORDER BY level;

请注意,SELECT MAX子查询假定播放器表中至少有一条记录。