borges02 0 Denunciar post Postado Abril 7, 2009 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
giesta 29 Denunciar post Postado Abril 7, 2009 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
koga021 0 Denunciar post Postado Abril 8, 2009 LIMIT 0, 16 se nao vai cumer tuplas Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Abril 13, 2009 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
hinom 5 Denunciar post Postado Abril 13, 2009 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
borges02 0 Denunciar post Postado Abril 13, 2009 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
hinom 5 Denunciar post Postado Abril 13, 2009 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 dianteesse 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
borges02 0 Denunciar post Postado Abril 14, 2009 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
hinom 5 Denunciar post Postado Abril 14, 2009 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
borges02 0 Denunciar post Postado Abril 14, 2009 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
hinom 5 Denunciar post Postado Abril 14, 2009 esse outro topico é sobre o mesmo assunto, não ? http://forum.imasters.com.br/index.php...p;#entry1268199 Compartilhar este post Link para o post Compartilhar em outros sites
borges02 0 Denunciar post Postado Abril 14, 2009 isso mesmo... Compartilhar este post Link para o post Compartilhar em outros sites