Как получить пробелы в базах данных баз данных

Хорошо, давайте предположим, что у меня есть таблица ниже с соответствующими значениями:

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 ответ

Вы можете добавить таблицу, содержащую возможные параметры уровня, когда используете запрос, который 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 предполагает, что в вашей таблице игроков есть хотя бы одна запись.

Другие вопросы по тегам