1

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

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,但任何数据库查询解决方案都可以帮助我解决。

谢谢。

4

1 回答 1

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 子查询假定您的播放器表中至少有一条记录。

于 2014-04-24T22:14:44.020 回答