como selecionar registros mysql pulando sempre um registro

09/01/2014

22

Boa noite

Meus amigos estou precisando de uma força imensa!
estou precisando saber como eu faço para dar um select no mysql para selecionar os registros sempre pulando um registro.
ex:
[img:descricao=result sql]http://arquivo.devmedia.com.br/forum/imagem/335313-20140109-205029.png[/img]
seguindo a imagem acima gostaria de selecionar ( o id=1 pular o id=2 e selecionar o id=3) e assim por diante
alguem poderia me dar uma solução
Ronald Santos

Ronald Santos

Responder

Post mais votado

11/01/2014

Colega vou supor que a sua tabela possui os IDs todos em sequência, pode se usar a técnica de verificar o resto da divisão (ID MOD 2) e na instrução SQL, dessa maneira se o resto da divisão for zero ele retorna somente os registros onde o ID é par e se for diferente de zero ele retorna os registros onde o ID que é ímpar.

Retorna registros com id par
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) = 0


Retorna registros com id ímpar
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) <> 0


Desse modo você consegue pular IDs, veja se atende suas necessidades!!

William

William
Responder

Mais Posts

11/01/2014

Alex Lekao

Ola Boa tarde!!!

Excelente a sugestao do Willian!!!

Acredito que a maneira mais pratica de identifcar pares e impares eh com o Resto de divisao!!!

Responder

13/01/2014

Paulo Pontes

Funciona perfeitamente, o problema é se algum id for excluído. Por exemplo se o id 2 for deletado, a consulta com resto 1 pegará o id 1 e 3. A não ser que garantam que nenhum id desta tabela seja removido.
Responder

13/01/2014

Alex Lekao

Entao, nao sei exatamente do que se trata.

Mas eu particularmente nao gosto de exclusao de itens de tabelas.

Acho melhor que se tenha um campo onde vc possa flegar sim ou nao para cancelado, apagado, etc...

eu nao recomendo exclusoes de cadastros, por uma questao de consistencia de dados em caso necessario de relatorios, ou outras coisas.

mas isso vai de analise do banco etc.
Responder

13/01/2014

William

Colega vou supor que a sua tabela possui os IDs todos em sequência, pode se usar a técnica de verificar o resto da divisão (ID MOD 2) e na instrução SQL, dessa maneira se o resto da divisão for zero ele retorna somente os registros onde o ID é par e se for diferente de zero ele retorna os registros onde o ID que é ímpar.

Retorna registros com id par
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) = 0


Retorna registros com id ímpar
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) <> 0


Desse modo você consegue pular IDs, veja se atende suas necessidades!!


Então colega webcodefree, como mencionei na minha resposta "vou supor que a sua tabela possui os IDs todos em sequência", meu código é apenas uma solução alternativa para o problema.

Trabalho diariamente com MySQLe não acredito que exista outra solução, mas estou acompanhando o tópico, quem sabe surge uma solução "mais adequada" a nível de instrução SQL!
Responder

14/01/2014

Paulo Pontes

Sim Willian, não fui contrário a sua solução até por que é muito plausível. Talvez seja a única solução mesmo tanto é que reforcei também sobre a chave sequencial. Também não sei a fundo se o MySQL tem como reordenar as chaves através de procedures ou gatilhos. Mas peço desculpas ai se viu meu comentário com maús olhos, não tive a intenção de ir contra seu raciocínio.
Responder

14/01/2014

William

Tranquilo colega webcodefree, sem problemas de minha parte!!

Afinal estamos todos no mesmo barco .. rsrsrsrsr
Responder

14/01/2014

Ronald Santos

Muito Obrigado mesmo camarada o seu comando resolveu o meu problema!!!!

Mais eu preciso de mas uma ajuda sua se for possível,
Eu estou precisando fazer um update pegando um valor de uma coluna de uma tabela N para uma coluna de uma tabela X sendo que sendo que o valor que eu irei pegar da tabela N é VARCHAR(255) e eu quero jogar esse valor para a coluna decimal(21,2) da tabela X!
qual a luz que você poderia me dar?

Colega vou supor que a sua tabela possui os IDs todos em sequência, pode se usar a técnica de verificar o resto da divisão (ID MOD 2) e na instrução SQL, dessa maneira se o resto da divisão for zero ele retorna somente os registros onde o ID é par e se for diferente de zero ele retorna os registros onde o ID que é ímpar.

Retorna registros com id par
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) = 0


Retorna registros com id ímpar
SELECT SeusCampos FROM SuaTabela WHERE MOD(id, 2) <> 0


Desse modo você consegue pular IDs, veja se atende suas necessidades!!
Responder

14/01/2014

William

Uma pergunta, suponho que essa coluna em decimal seja para valores monetários, esses valores em varchar(255) também são monetários?
Responder

14/01/2014

William

Uma pergunta, suponho que essa coluna em decimal seja para valores monetários, esses valores em varchar(255) também são monetários?
Responder

14/01/2014

William

Colega Ronald, vou supor novamente que os valores no campo VARCHAR(255) sejam monetários, ou seja, usando a vírgula como separador decimal.

Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!

Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.

UPDATE TabelaX x 
SET ColunaX = (SELECT REPLACE(REPLACE(colunaN, '.', ''), ',', '.') FROM TabelaN n WHERE n.idN = x.idX)


Observe o exemplo de entrada e saída do valores abaixo.
ColunaN	     - ColunaX
VARCHAR(255) - DECIMAL(21,2)
1.123,00     - 1123.00
456,09	     - 456.09
4,90	     - 4.90
12.000,00    - 12000.00
0,90	     - 0.90
11345,90     - 11345.90


Qualquer dúvida estou a disposição ...
Responder

14/01/2014

Ronald Santos

Boa noite meu amigo eu irei testar agora o seu comando e ja lhe aviso se funcionou?

Colega Ronald, vou supor novamente que os valores no campo VARCHAR(255) sejam monetários, ou seja, usando a vírgula como separador decimal.

Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!

Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.

UPDATE TabelaX x 
SET ColunaX = (SELECT REPLACE(REPLACE(colunaN, '.', ''), ',', '.') FROM TabelaN n WHERE n.idN = x.idX)


Observe o exemplo de entrada e saída do valores abaixo.
ColunaN	     - ColunaX
VARCHAR(255) - DECIMAL(21,2)
1.123,00     - 1123.00
456,09	     - 456.09
4,90	     - 4.90
12.000,00    - 12000.00
0,90	     - 0.90
11345,90     - 11345.90


Qualquer dúvida estou a disposição ...
Responder

03/02/2014

Ronald Santos

Meu amigo me desculpa a demora para lhe retornar uma resposta
eu testei o comando que vc me passou mais deu erro

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

acima está o erro que o mysql me retornou!!!


Colega Ronald, vou supor novamente que os valores no campo VARCHAR(255) sejam monetários, ou seja, usando a vírgula como separador decimal.

Usei 2 instruções de REPLACE() encadeadas para substituição de caracteres, no seu caso '.' por vazio '' e a ',' pelo '.', dessa maneira conseguimos evitar o trucamento de valores quando convertemos valores varchar para decimal. Lembrando que o MySQL usa o '.' como separador decimal!

Outro ponto seria capturar esses valores de outra tabela, nesse caso usei uma subquery para retornar o valor desejado, no código estou comparando os IDs senão a subquery retorna mais do que 1 linha e vai dar erro.

UPDATE TabelaX x 
SET ColunaX = (SELECT REPLACE(REPLACE(colunaN, '.', ''), ',', '.') FROM TabelaN n WHERE n.idN = x.idX)


Observe o exemplo de entrada e saída do valores abaixo.
ColunaN	     - ColunaX
VARCHAR(255) - DECIMAL(21,2)
1.123,00     - 1123.00
456,09	     - 456.09
4,90	     - 4.90
12.000,00    - 12000.00
0,90	     - 0.90
11345,90     - 11345.90


Qualquer dúvida estou a disposição ...
Responder

03/02/2014

William

Cole aqui exatamente o mesmo código que você está executando!!!
Responder

03/02/2014

Ronald Santos

Meu amigo eu consegui mais com essa comando abaixo.
update reg_c490 x inner join inconsistencia n on x.id = n.id_registro_bd set x.vl_opr = replace(n.valor_esperado_campo, ',', '.') where x.cst_icms = '000';

Cole aqui exatamente o mesmo código que você está executando!!!
Responder

03/02/2014

William

Funcionou da maneira como vc precisava?
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar