Como obter a posição do registro na tabela?
Isso é postgres?
SELECT
row_number() OVER(ORDER BY "id"),
t.*
FROM NOME_TABELA AS t;
Mas por algum motivo os registros na minha tabela não estão nas posições que deveria está
o ID 5 era pra está na 2° posição
Já utilizou um SQL assim:
SELECT * FROM empresas ORDER BY empresa_id ASC
Você precisa detalhar melhor as suas duvidas, ficou vago demais o que perguntou e quando se pergunta algo tenha paciencia!
Uma grande questão nessa dúvida é para o que a posição do registro na tabela seria útil? (é mais um questionamento por curiosidade msm, não consigo pensar em algo para usar com essa informação)
Note que esse row_number não necessariamente vai sempre retornar a posição real do registro na tabela.
O row_number() retorna a posição dos resultados do select, então se adicionar um WHERE nessa query, por exemplo, o resultado vai vir quebrado para o seu caso.
Mas utilizando tabela derivada resolve.
Select
T.posicao
From
(Select row_number() over() as posicao,
empresa_id
From empresas) T
Where
T.empresa_id = :empresa_id
Isso não tem lógica nenhuma … não precisa de Sub Query …
Porque você tem duas contas na rede social?
é um sub - query na FROM
é desnecessário nesse exemplo, e não tem nada de tabela derivada se está falando coisa absurda …
Antes de chamar de absurdo, você deveria tentar executar a query que ele passou e entender porque faz diferença.
No exemplo que ele passou usando a tabela derivada (ou subquery) faz uma grande diferença.
Como eu vou executar uma SQL que só ele sabe o que está fazendo?
E na minha opinião a afirmação dele é um absurdo!
Ele fez uma Sub Query só isso! ai não demonstra nada de tabela derivada e sim um erro conceitual de escrever uma SQL e isso acontece nesse exemplo dado.
Ele que fez a pergunta e deu a resposta!
Você leu a thread inteira?
Ele colocou uma solução original baseada na resposta do @staroski .
Eu apontei um problema na solução dele, incluindo um link demonstrando o problema.
Ele então postou uma solução para o problema que apontei usando a tabela derivada/subquery.
Se você não consegue nem executar a query (tem um link para ela na minha resposta) como pode afirmar que ele tá errado?
Eu li, inclusive respondi e parece que não era por Order By!
A afirmação dele em cima da minha resposta que não estava certa, e a atitude dele de dizer que a SQL dele em um tabela derivada / sub query também não convenceu, porque, a resposta dele está errada e sim é um absurdo, utilizar um Sub Query do jeito que ele fez, e uma constatação.
Se ele vir aqui e demonstrar o problema e o que tentou fazer, eu tento resolver.
A query que você sugeriu está errada, porque não dá a solução que ele quer.
Ele postou uma query que resolve o problema dele. Como é que você diz que está errada?
Você já entendeu a diferença do que ele tá querendo e do que você sugeriu?
Isso eu sei inclusive nem rebati, só achei que a resposta dele não me convenceu, porque está errada!
Porque eu conheço o usuário a muito tempo e não é isso que aconteceu, inclusive na thread tem pessoa contestando a resposta dele.
Eu coloquei um exemplo de solução que ele disse que não estava correta, tudo bem, e ai por cima da minha resposta disse
E agora eu quero saber o que ele tentou fazer porque a resposta do outro usuário não precisa de sub query nem de tabela derivada
Seguinte @AbelBueno você não conhece todos os usuários, ele por exemplo tem outra conta! (inclusive está na thread e cara sério não adianta proteger não)
Não vou discutir mais já deu!
A pessoa “contestando” a resposta dele sou eu!
Eu não preciso conhecer os usuários para responder perguntas.
Me parece claro que @cleitonti e @Cleiton_Conceicao são a mesma pessoa, ele nem tá tentando esconder. Tanto é que ele respondeu ao @Lucas_Camara o que ele tava tentando fazer.
E como @Cleiton_Conceicao ele deu a resposta correta.
isso é um menção sua e não disse que não era para responder voce sempre disvirtua o papo
Não foi só você que contestou o Lucas também.
Sinceridade eu posso discordar da pessoa por uma resposta que ela deu e você também pode discorda de mim ou qualquer pessoa, vivemos num mundo dos contrários e respeitamos todas as opiniões, pra mim é um absurdo ele pegar a resposta dele e colocar no lugar da outra já dada como solução do problema, mas isso tudo é opinião.
Honestamente, eu já nem sei do que você tá falando.
Para ficar de referência a quem consultar depois.
A primeira solução com essa query:
Select row_number() over() as posicao,
empresa_id
From empresas
Não resolve o problema, pois quando um WHERE for utilizado, os valores de row_number irão mudar.
A solução para isso se resolve com a query abaixo:
Select
T.posicao
From
(Select row_number() over() as posicao,
empresa_id
From empresas) T
Where
T.empresa_id = :empresa_id
Que elimina o problema da anterior.