eduardoleandro
(usa Debian)
Enviado em 24/02/2014 - 18:29h
Leonhart escreveu:
Boa noite pessoal. Recentemente descobri que é possível fazer no MySQL uma consulta do tipo:
SELECT 1,2,3,4 FROM tabela;
E como resultado ela retorna:
1 2 3 4
1 2 3 4
1 2 3 4
Sei que são retornadas 3 linhas porque minha tabela possui 3 registros, mas gostaria de saber porque o MySQL permite fazer isso, se isso tem alguma utilidade e se é possível ativar alguma diretiva que proíba fazer esse tipo de consulta, visto que ela pode ser maliciosa.
Agradeço desde já.
Caro Leonhart,
Eu já tirei proveito deste tipo de comportamento do Mysql nas consultas, acredito que seja permitido inclusive em outros bancos de dados.
Bom, eu precisei de uma tabela mestre usando datas, para exibir resultados agrupados por data de outra tabela, sendo que deveriam ser exibidas todas as datas dentro de um mês, inclusive as datas sem registro:
Para não precisar de criar laços nem views para isso, eu usei uma tabela temporária:
SET @dt:=CURDATE(); /* variavel que guarda a data */
CREATE TEMPORARY TABLE tmp_datas SELECT @dt:=DATE_ADD(@dt, INTERVAL 1 DAY) dia FROM tabela LIMIT 30; /* tabela temporaria tmp_datas com periodo selecionado */
SELECT * FROM tmp_datas;
OBS.: lembrando que a tabela que irá referenciar deverá conter um numero de registros igual ou maior ao que voce quer usar. No meu caso, precisei apontar para uma tabela que tivesse 30 registros no minimo para que eu tivesse 30 linhas de retorno.
Este é um exemplo para você usar este tipo de comportamento "permissivo".
Se seu banco de dados está protegido de outras pessoas, com os GRANTS definidos por host e usuário, então você pode ficar tranquilo quanto a essa "permissividade" proposta pelo banco. Pode ser que haja alguma diretiva, que possa inibir isso, mas desconheço e nem encontrei nada.
Se for para sua aplicação, e realmente muito necessário, sugiro que você tente fazer o tratamento sem usar o SGDB.