Considere esta tabela no mysql
create table numbers (number int);
insert into numbers values (3), (2), (9);
select * from numbers;
+--------+
| number |
+--------+
| 3 |
| 2 |
| 9 |
+--------+
Existe uma consulta simples para gerar uma tabela com as seguintes colunas
- Os números de 1 a 10
- 1 se o número estiver presente nos números da tabela e 0 caso contrário
Eu acho que você tem que criar uma sequência de números para fazer isso. Se possível, quero criar essa sequência sem armazená-la no banco de dados.
Pergunta relacionada: existe uma consulta select que gera uma sequência de números de 1 a 10 (ou 100 ou 1000)?
EM MariaDB
MariaDB tem um mecanismo de armazenamento SEQUENCE . Portanto, se você estiver usando o MariaDB, todos os seus problemas de sequência terminaram (ou apenas começaram).
Sequência de 10 números
NÃO UTILIZANDO TABELAS
Sequência de 10 números
Sequência de 100 números
Sequência de 1000 números
Sequência de 10.000 números
USANDO TABELAS
Sequência de 10 números
Sequência de 100 números
Sequência de 1000 números
Sequência de quaisquer números (Exemplo: 3,5 milhões)
SUA PERGUNTA REAL
Usando a sequência
0..9
, você deixou a sequência na tabelaSeus dados de amostra com a nova consulta
DE UMA CHANCE !!!
Com MySQL 8.0, MariaDB 10.2 e versões posteriores, você pode usar CTEs recursivos, então:
Obviamente, você pode modificar isso para usar o valor inicial, o passo e o valor final de sua escolha.
Quanto à segunda pergunta, é trivial expandir o acima (com inspiração em parte da resposta de Ronaldo):
Nota: CTEs são limitados por
cte_max_recursion_depth
(padrão 1000) no MySQL, enquanto no MariaDB a variável é chamadamax_recursive_iterations
(padrão 4294967295 antes da versão 10.6.0 onde mudou para 1000).Editar:
O MariaDB 10.3 introduziu objetos de sequência (como definido no SQL Standard e como visto, por exemplo, no Oracle RDBMS). Eles não são úteis para essa pergunta específica, pois os valores são armazenados no banco de dados, mas o recurso pode ser útil em outros casos de uso relacionados à sequência.