Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

borges02

[Resolvido] Erro em comando sql!

Recommended Posts

Estou tentando executar o seguinte comando SQL: SELECT CODIGOREG, NOMEREG FROM REGIAO WHERE CODIGOREG NOT IN (SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT 1) ORDER BY CODIGOREG LIMIT 16...........

 

Mas quando executo esse comando dentro da ferramenta MySQL Query Browser aparece a seguinte mensagem de erro: 'This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

 

Alguém sabe me dizer o que pode estar acontecendo? Estou usando o mysql server 6.0....

 

 

Desde já, agradeço pela ajuda e atenção de todos...

Muito Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eh, nao pode limit em IN

 

mas da pra fazer isso aih assim

 

SELECT CODIGOREG, NOMEREG FROM REGIAO WHERE CODIGOREG NOT IN (SELECT min(CODIGOREG) FROM REGIAO) ORDER BY CODIGOREG LIMIT 16

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza giesta e koga021 ?

 

O valor do LIMIT que está dentro do NOT IN vai sendo incrementado conforme vai sendo carregado o DataGridView. Ele começa com 0 depois vai incrementando 16, depois 32, depois 48 e assim por diante. Se eu colocar dentro do NOT IN (SELECT MIN(CODIGOREG) FROM REGIAO) ele só irá comparar com o primeiro registro, por isso no meu caso não da para usar essa sintaxe. Como eu estou usando a propriedade VirtualMode do DataGridView tenho que carregar o DataGridView aos poucos, no meu caso vai ser 16 registros por página, por isso uso o limit. Tem mais alguma idéia de como posso resolver esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT CODIGOREG, NOMEREG FROM REGIAO WHERE CODIGOREG NOT IN (SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT 1) ORDER BY CODIGOREG LIMIT 16

do trecho em negrito,

a instrução "LIMIT 1" será sempre LIMIT 1 ?

ou poderá ter LIMIT 2, LIMIT 30, LIMIT 4 ?

 

pergunto isso, porque se for sempre "limit 1" então não precisa usar NOT IN, basta usar o operador de comparaçã "<>"

 

ficaria assim:

SELECT 
	t.CODIGOREG AS CODIGOREG,
	t.NOMEREG AS NOMEREG,
FROM
	REGIAO AS t
WHERE
	t.CityID > ( SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT 1 )
ORDER BY t.CODIGOREG

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza hinom?

 

ref. a thread que você postou, o limit do trecho em negrito pode variar sim. Ele começa com 0, depois 16, 32, 48 e assim por diante. É que estou usando a propriedade virtualMode do DataGridView e tenho que carregar o DataGridView por partes. A lógica seria mais ou menos assim: Tenho que criar um comando sql onde irá carregar os 16 primeiros registros, mas quando for carregar os 16 primeiros registros precisa verificar se não é igual aos 16 primeiros registros que ja foram adicionados no DataGridView.

 

Eu tentei dessa forma que você sugeriu: SELECT CODIGOREG, NOMEREG FROM REGIAO WHERE CODIGOREG > (SELECT CODIGOREG from regiao order by codigoreg limit 1) order by codigoreg....

 

Dessa forma, usando o valor 1 para o limit do trecho em negrito deu certo, mas quando altero o valor por exemplo 2, aparece a seguinte mensagem de erro: "Subquery returns more than 1 row"...

Compartilhar este post


Link para o post
Compartilhar em outros sites

então isso que passei não rola não..

 

poderia explicar melhor o que pretende com essa query ?

porque pode ser que exista outras formas de fazer.

 

explicação sobre o erro quando usado limit maior que 1

SELECT 
	t.CODIGOREG AS CODIGOREG,
	t.NOMEREG AS NOMEREG,
FROM
	REGIAO AS t
WHERE
	t.CityID > ( SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT 2 )
ORDER BY t.CODIGOREG

a expressão

WHERE

t.CityID > ( SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT 2 )

retornará erro porque só pode retornar um único resultado.

 

 

 

 

ref. a thread que você postou, o limit do trecho em negrito pode variar sim. Ele começa com 0, depois 16, 32, 48 e assim por diante

esse trecho ?

WHERE

t.CityID > ( SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT X )

X seria os números 0, depois 16, 32, 48 ?

 

 

não seria isso ?

 

1

SELECT 
	t.CODIGOREG AS CODIGOREG,
	t.NOMEREG AS NOMEREG,
FROM
	REGIAO AS t
WHERE
	t.CityID > ( SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT 0, 1 )
ORDER BY t.CODIGOREG

 

16

SELECT 
	t.CODIGOREG AS CODIGOREG,
	t.NOMEREG AS NOMEREG,
FROM
	REGIAO AS t
WHERE
	t.CityID > ( SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT 16, 1 )
ORDER BY t.CODIGOREG

32

SELECT 
	t.CODIGOREG AS CODIGOREG,
	t.NOMEREG AS NOMEREG,
FROM
	REGIAO AS t
WHERE
	t.CityID > ( SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT 32, 1 )
ORDER BY t.CODIGOREG

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza hinom ?

 

Estou querendo fazer uma query para carregar o DataGridView por partes. Estou usando a propriedade VirtualMode do DataGridView do visual studio 2008 (c#) windows forms e tenho que carregar em media mais ou menos 500.000 registros no DataGridView quando é executado o form. Tenho que criar uma query onde terei que carregar os 16 primeiros registros da tabela, sendo que esses 16 primeiros registros tem que ser diferente dos 16 primeiros registros que ja foram adicionados no DataGridView e assim por diante. Tenho que fazer a comparação para não deixar repetir os registros...

 

O valor que sempre terá mudanças é o valor x do limit: WHERE CODIGOREG > ( SELECT CODIGOREG FROM REGIAO ORDER BY CODIGOREG LIMIT X,16 )...

Compartilhar este post


Link para o post
Compartilhar em outros sites

então não seria somente usar o limit ?

 

 

à partir do 1º

SELECT 
	t.CODIGOREG AS CODIGOREG,
	t.NOMEREG AS NOMEREG,
FROM
	REGIAO AS t
ORDER BY t.CODIGOREG
LIMIT 1, 16

 

à partir do 16º

SELECT 
	t.CODIGOREG AS CODIGOREG,
	t.NOMEREG AS NOMEREG,
FROM
	REGIAO AS t
ORDER BY t.CODIGOREG
LIMIT 17, 16

 

 

à partir do 32º

SELECT 
	t.CODIGOREG AS CODIGOREG,
	t.NOMEREG AS NOMEREG,
FROM
	REGIAO AS t
ORDER BY t.CODIGOREG
LIMIT 31, 16

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom,

 

testei a query da ultima thread que você postou e deu certo. Era isso que eu estava precisando mesmo. Valeu, muito obrigado pela ajuda e pelos exemplos, valeu mesmo. Post, resolvido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.