|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
lokasso Aprendiz
Registrado: Terça-Feira, 11 de Abril de 2017 Mensagens: 174
|
Enviada: Sex Dez 01, 2017 3:14 pm Assunto: [Resolvido]Fazer para ñ aparecer registro duplicado FireBird |
|
|
Galera, eu ja procurei em todo o google e realmente não encontrei uma solução para registro duplicado, pois a maioria dos resultados é sobre deletar o registro, porém eu não quero deletar, apenas quero que apareça apenas um na consulta, irei mandar um print para "tentar" explicar
É o SQL que estou utilizando para trazer a concatenação entre as tabelas
São as chaves PK e UNIQ respectivamente e seria por aqui que gostaria de filtrar os registros, pois pelo nome não poderá porque com toda certeza terá mais de um livro com o mesmo nome
São tabelas detalhes e por isso que está aparecendo mais de um registro, pois em um livro tem vários assuntos e tem livros que tem mais de um autor, portanto eu não poderia excluir o registro
Acho que consegui explicar.
Já tentei count, distint e group by porém não resolveu
Gostaria de uma luz para fazer esse filtro
Abraços
Grato
Editado pela última vez por lokasso em Ter Dez 05, 2017 2:12 am, num total de 1 vez |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
|
Voltar ao Topo |
|
|
lokasso Aprendiz
Registrado: Terça-Feira, 11 de Abril de 2017 Mensagens: 174
|
Enviada: Sex Dez 01, 2017 4:32 pm Assunto: |
|
|
imex, desculpe por não mencionar, FireBird 3.0.2
Código: | SELECT bl.ID_BIBLIOLIVRO,
BL.TITULO_DESC,
BL.SUBT_DESC,
BL.VOLUME,
BL.EDITORA,
BL.GENERO,
BL.REF,
BL.STATUS,
BL.BAIXA,
ASL.DESC_ASSUNTO,
AU.NOME_AUTOR,
ED.NOME_EDITORA,
G.NOME_GENERO
FROM TB_AUTOR AU left join TB_AUTORLIVRO AL on al.id_autor = au.id_autor
join TB_BIBLIOLIVRO BL on al.id_bibliolivro = bl.id_bibliolivro
join TB_ASSUNTO ASL on bl.id_bibliolivro = asl.id_bibliolivro
join TB_EDITORA ED on bl.editora = ed.id_editora
join TB_GENERO G on bl.genero = g.id_genero
WHERE 1 = 1 |
Abraços |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Dez 01, 2017 4:55 pm Assunto: |
|
|
Experimente fazer uns testes dessa forma:
Código: | SELECT bl.ID_BIBLIOLIVRO,
BL.TITULO_DESC,
BL.SUBT_DESC,
BL.VOLUME,
BL.EDITORA,
BL.GENERO,
BL.REF,
BL.STATUS,
BL.BAIXA,
(SELECT LIST(ASL.DESC_ASSUNTO, ' - ')
FROM TB_ASSUNTO ASL
WHERE asl.id_bibliolivro = bl.id_bibliolivro) AS DESC_ASSUNTO,
(SELECT LIST(AU.NOME_AUTOR, ' - ')
FROM TB_AUTORLIVRO AL
INNER JOIN TB_AUTOR AU on au.id_autor = al.id_autor
WHERE al.id_bibliolivro = bl.id_bibliolivro) AS NOME_AUTOR,
ED.NOME_EDITORA,
G.NOME_GENERO
FROM TB_BIBLIOLIVRO BL
inner join TB_EDITORA ED on bl.editora = ed.id_editora
inner join TB_GENERO G on bl.genero = g.id_genero |
Espero que ajude |
|
Voltar ao Topo |
|
|
lokasso Aprendiz
Registrado: Terça-Feira, 11 de Abril de 2017 Mensagens: 174
|
Enviada: Sex Dez 01, 2017 11:36 pm Assunto: |
|
|
imex escreveu: | Experimente fazer uns testes dessa forma:
Código: | SELECT bl.ID_BIBLIOLIVRO,
BL.TITULO_DESC,
BL.SUBT_DESC,
BL.VOLUME,
BL.EDITORA,
BL.GENERO,
BL.REF,
BL.STATUS,
BL.BAIXA,
(SELECT LIST(ASL.DESC_ASSUNTO, ' - ')
FROM TB_ASSUNTO ASL
WHERE asl.id_bibliolivro = bl.id_bibliolivro) AS DESC_ASSUNTO,
(SELECT LIST(AU.NOME_AUTOR, ' - ')
FROM TB_AUTORLIVRO AL
INNER JOIN TB_AUTOR AU on au.id_autor = al.id_autor
WHERE al.id_bibliolivro = bl.id_bibliolivro) AS NOME_AUTOR,
ED.NOME_EDITORA,
G.NOME_GENERO
FROM TB_BIBLIOLIVRO BL
inner join TB_EDITORA ED on bl.editora = ed.id_editora
inner join TB_GENERO G on bl.genero = g.id_genero |
Espero que ajude |
imex valeu brother, funcionou perfeito, nem conhecia esse comando "LIST" no SQL, acabei de copiar e colar no IBExpert e não aparece mais os registros duplicados, amanhã vou testar no Delphi e te mando o Feedback mais detalhado
Abraços brother |
|
Voltar ao Topo |
|
|
lokasso Aprendiz
Registrado: Terça-Feira, 11 de Abril de 2017 Mensagens: 174
|
Enviada: Ter Dez 05, 2017 2:11 am Assunto: |
|
|
imex, brother desculpe por demorar em dar feedback sobre o seu select, pois bem, como eu disse no post acima, tinha dado certo a consulta pelo ibexpert, ai fui tentar pelo delphi e dava alguns erros, sempre depois desse comando: "(' - ')", eu não tava conseguindo passar esse select via código, então optei por criar mais duas FDQuery's e deixar os comandos fixos e apenas atribui um parametro diferentes para cada query.
Teria como deixar essa query dinamica ou não? Senão tiver como eu deixo as duas Query's e não tem problema, pois ja está solucionado esse problema e já irei dar "RESOLVIDO" no tópico.
Enfim imex valeu pela ajuda brother
Abraços |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Dez 05, 2017 9:23 am Assunto: |
|
|
Acredito que seja possível deixar a query dinâmica.
Teria que ver a mensagem de erro que está sendo exibida, mas se o problema for por causa das aspas experimente utilizar a função QuotedStr. Ex:
Código: | Query1.SQL.Add( '(SELECT LIST(ASL.DESC_ASSUNTO, ' + QuotedStr(' - ') + ')' ); |
Ou então coloque duas aspas simples seguidas para obter uma aspas simples entro da string:
Código: | Query1.SQL.Add( '(SELECT LIST(ASL.DESC_ASSUNTO, '' - '')' ); |
Espero que ajude |
|
Voltar ao Topo |
|
|
lokasso Aprendiz
Registrado: Terça-Feira, 11 de Abril de 2017 Mensagens: 174
|
Enviada: Ter Dez 05, 2017 10:01 am Assunto: |
|
|
imex bom dia, tentei de ambos os jeitos e simplesmente fica vermelho no segundo '(' e não vai de jeito nenhum, uma alternativa foi colocar fixo nas querys e só passar os parametros no case.
imex, não querendo abusar, mas ja abusando, estou tento um probleminha que não to conseguindo resolver, tipo estou usando o mesmo select que você me passou para "juntar" o historico de empréstimos do leitor, porém ele não está juntando, você poderia me ajudar nisso?
Estou usando o código dessa maneira:
Código: | SELECT E.ID_EMPRESTIMO,
(SELECT LIST(L.NOME_LEITOR, ' - ')
FROM TB_LEITOR L
WHERE L.ID_LEITOR = E.ID_LEITOR) AS LEITOR,
///////
(SELECT LIST(BL.REF||' - '||BL.TITULO_DESC||' - '||
E.DATA_EMPRESTIMO||' - '||E.DATA_DEVOLUCAO, ASCII_CHAR(13)||ASCII_CHAR(10))
/////aqui eu consegui concatenar os campos que quero, mas não junta-los
FROM TB_ITEMEMPRESTIMO IE
INNER JOIN TB_BIBLIOLIVRO BL ON BL.REF = IE.REF_LIVRO
WHERE IE.ID_EMPRESTIMO = E.id_emprestimo) AS LIVRO
FROM TB_EMPRESTIMO E
WHERE 1=1 |
Vou tentar explicar melhor:
O leitor 1 tem dois emprestimos do mesmo livro e 1 diferente, porém em datas diferente e conseguintemente na tabela itememprestimo os ids dos itens são diferentes e os ids dos emprestimos tambem
Teria como fazer essa listagem?
Desde ja agradeço
Abraços |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Dez 05, 2017 1:09 pm Assunto: |
|
|
Boa tarde,
Sobre montar a query com código, acho melhor você postar o seu código e a mensagem de erro exibida.
Sobre essa outra query, não sei se entendi corretamente a estrutura das tabelas mas desconfio que você vai ter que tirar o campo ID_Emprestimo que está logo depois do Select para permitir o agrupamento dos registros, e se você adicionar algum outro campo naquele local vai ser necessário adicionar o Group By.
Espero que ajude |
|
Voltar ao Topo |
|
|
lokasso Aprendiz
Registrado: Terça-Feira, 11 de Abril de 2017 Mensagens: 174
|
Enviada: Ter Dez 05, 2017 5:57 pm Assunto: |
|
|
imex escreveu: | Boa tarde,
Sobre montar a query com código, acho melhor você postar o seu código e a mensagem de erro exibida.
Sobre essa outra query, não sei se entendi corretamente a estrutura das tabelas mas desconfio que você vai ter que tirar o campo ID_Emprestimo que está logo depois do Select para permitir o agrupamento dos registros, e se você adicionar algum outro campo naquele local vai ser necessário adicionar o Group By.
Espero que ajude |
imex, desculpe a demora pra lhe dar feedback, enfim, sobre a primeira query vou deixa-la como esta mesmo fixa nas querys, ta funcionando, isso é o mais importante e sobre a segunda query esta até agora quebrando a cabeça aqui, mas ai fui ver no cronograma e o usuário não pediu relatório de histórico de livros emprestados por cliente, então estou optando por nem fazer esse relatório.
Só vou te explicar qual era a minha ideia, iria ser como se fosse o histórico de todos os livros emprestados por cada leitor, ou seja, se o leitor 1 emprestou o livro "a biblia do delphi" por 100x, la estaria as 100x que o leitor emprestou esse livro, porém iria chegar uma hora que esse relatório nem iria abrir mais, por tão cheio de informações, então mais um motivo que irei tirar do projeto, caso o cliente deseje um historico, implemento um histórico com os 3 ultimos emprestimos.
Enfim, post realmente encerado.
Valeu por tudo imex, valeu mesmo, tu me ajudou muito
Abraços |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|