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