Jump to content
daniellecd

Postgres - Dúvida com registros

Recommended Posts

Boa tarde,
Poderiam me ajudar?


Gente, fiz uma consulta na minha tabela pessoa, onde tenho que retornar os pais desta pessoa. Até ai, tudo bem!
Fato é que teria que voltar tudo em uma única linha! Ou seja, se a pessoa tem pai e mãe, o registro vem duplicado, apenas diferenciando o nome do pai e da mãe.Exemplo:

1. Paulo Camargo / Pai: Carlos Camargo
2. Paulo Camargo / Mãe: Sônia Camargo
Como poderia estar fazendo para vir uma única tupla já com os nomes dos pais?
Ex.:
1.Paulo Camargo / Pai: Carlos Camargo / Mãe: Sônia Camargo.
Vejam que:
Tabela PESSOA estão todas as pessoas! (Filho, pai, mãe, etc.)
Tabela FILIACAO é onde faz a ligação do filho (a) com os pais.


Desde já agradeço imensamente!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By ronaldo_calado
      Bom dia, estou com dificuldades em fazer um consulta para retornar a soma de valores usando um alias, gostaria de saber se tem outra forma de fazer a consulta, ela funciona no mysql, mas como postgres funciona de forma diferente eu não estou conseguindo fazer
      SELECT date_part('year', due_at) AS ano, date_part('month', due_at) AS mes, (SELECT SUM(value) FROM app_invoices WHERE user_id = 51 AND status = 'paid' AND type = 'income' AND year(due_at) = ano AND month(due_at) = mes) AS income, (SELECT SUM(value) FROM app_invoices WHERE user_id = 51 AND status ='paid' AND type = 'expense' AND year(due_at) = ano AND month(due_at) = mes) AS expense FROM app_invoices WHERE user_id = 51 AND status = 'paid' AND due_at >= DATE(now() - INTERVAL '3' MONTH) GROUP BY date_part('year', due_at), date_part('month', due_at) O erro que está retornando é ERROR: column "ano" does not exist
       
      A ideia era ele somar as faturas dos meses e como na imagem:
       

    • By TFernandes89
      Bom dia, preciso atualizar uma linha do meu banco de dados validando duas colunas diferentes... estou tentando da seguinte forma:
       
      update produn set prun_margem=prun_margem + 1 from produtos where prod_codigo=prun_prod_codigo and prun_unid_codigo='003' and prun_unid_codigo='050' and prod_grup_codigo='10003'  
      Tenho que atualizar a margem em +1 somente quando se tratar do grupo (prod_grup_codigo) 10003 e nas unidades (prun_unid_codigo) 003 e 050, dessa forma que estou tentando não me da erro, porem não atualiza nada, e se eu tiro a unidade 050 ele atualiza na unidade 003 normalmente.
    • By icorradi
      Tenho uma "rede social" de artigos, e existem mais de 5 milhoes de artigos registrados. Meu backend foi feito com Django, então foi utilizado o Postgres.

      Estou com um grande problema: para fazer a consulta na tabela de artigos, está SUPER lento, claro q o motivo (creio eu), é a quantidade de linhas (mais de 5 milhoes) e a quantidade de texto da coluna do corpo do artigo. Mas como arquitetar meu banco de dados para para ser tipo o wikipedia? Como deixar minha consulta rapida? Separar em varios bancos? 
       
      Como essas empresas gigantes (facebook, wikipedia, amazon, google) fazem pra suportar milhoes de dados?

      O meu problema será q é o Postgres, q não é preparado pra isso?
       
      Obrigado.
    • By Analinee3
      Fiz o mapeamento da atividade e   Fiz o código, mas notei q da erro  bem próximo as chaves. Sou iniciante, não tenho noção do erro , como o q é ou que pode ser.agradeço a ajuda!
       
      CREATE TABLE CLIENTE(
      cod_cliente INTEGER NOT NULL,
      nome_cliente VARCHAR(30) NOT NULL,
      num_pedido  INTEGER,
      PRIMARY KEY(COD_CLIENTE)
      );
       CREATE TABLE TELEFONE (
       cod_cliente  INTEGER NOT NULL,
       telefone_fixo  VARCHAR (10),
       telefone_celular  VARCHAR (10),
       FOREIGN KEY ( COD_CLIENTE)
        REFERENCES  CLIENTE  (COD_CLIENTE)
       PRIMARY KEY ( COD_CLIENTE)
         REFERENCES CLIENTE (COD_CLIENTE)
        ); 
        CREATE TABLE EMAIL_CLIENTE (
         cod_cliente     INTEGER NOT NULL,
        email_cliente,  VARCHAR (30),
         email2_cliente VARCHAR (30),
         FOREIGN KEY ( COD_CLIENTE)
        REFERENCES  CLIENTE  ( COD_CLIENTE)
       PRIMARY KEY ( COD_CLIENTE)
         REFERENCES CLIENTE (COD_CLIENTE)
         );
         CREATE TABLE VENDA (
         num_pedido      INTEGER,
         dt_pedido     TIMESTAMP,
         cod_pedido   INTEGER,
         PRIMARY KEY (NUM_PEDIDO) 
         FOREIGN KEY (COD_PRODUTO)
           REFERENCES  PRODUTO (COD_PRODUTO);
         
        CREATE TABLE VENDA_CONTEM(
      num_pedido        INTEGER,
      cod_produto        INTEGER,
      pco_produto      NUMERIC (6,0),
      qtd              NUMERIC (6,0),
      PRIMARY KEY (NUM_PEDIDO)
      REFERENCES  VENDA( NUM_PEDIDO)
      FOREIGN KEY ( COD_PRODUTO)
       REFERENCES  PRODUTO ( COD_PRODUTO)
       );
       CREATE TABLE PRODUTO (
       cod_produto      INTEGER,
       nom_produto      VARCHAR (30) NOT NULL,
       est_produto     NUMERIC (6,0),
       pco_produto    NUMERIC (6,0),
       fabricante       VARCHAR (30),
       FOREIGN KEY (NUM_PEDIDO)
        REFERENCES  COMPRA ( NUM_PEDIDO)
        PRIMARY KEY (COD_PRODUTO)
       );

       CREATE TABLE COMPRA (
       num_pedido     INTEGER,
       dta_pedido     TIMESTAMP,
        FOREIGN KEY (NUM_PEDIDO)
        REFERENCES  VENDA (NUM_PEDIDO)
        PRIMARY KEY (NUM_PEDIDO)
         REFERNCES VENDA(NUM_PEDIDO)
         );
         CREATE TABLE FORNECEDOR (
         cod_fornecedor         INTEGER,
         nom_fornecedor     VARCHAR (30) NOTT NULL,
         rua_local             VARCHAR (30),
         numero_local      VARCHAR (30),
         PRIMARY KEY ( COD_FORNECEDOR)
         );
      CREATE TABLE TELEFONE_FORNECEDOR(
      cod_fornecedor   INTEGER,
      telefone1   VARCHAR (10),
      telefone2      VARCHAR (10),
      FOREIGN KEY ( COD_FORNECEDOR)
        REFERENCES FORNECEDOR ( COD_FORNECEDOR)
      PRIMARY  KEY ( COD_FORNECEDOR)
          REFERENCES  FORNECEDOR ( COD_FORNECEDOR)
          
        );
        CREATE TABLE EMAIL_FORNECEDOR (
      cod_fornecedor    INTEGER,
      email1_fornecedor  VARCHAR (30),
      email2_fornecedor   VARCHAR (30),
      FOREIGN KEY (COD_FORNECEDOR)
        REFERENCES FORNECEDOR ( COD_FORNECEDOR)
       PRIMARY  KEY ( COD_FORNECEDOR)
          REFERENCES  FORNECEDOR ( COD_FORNECEDOR)
          );

    • By Silva Mateus
      Olá amigos do fórum. Hoje trago a seguinte questão: 
       
      Estou iniciando os estudos sobre conexões JAVA/Postgres. E me deparei com o seguinte problema: 
      Quando tento testar a minha classe chamada, "PoolDeConexoes", ela me retorna os seguintes erros: 

      "Exception in thread "main" java.lang.NullPointerException
          at BDAccess.PoolDeConexoes.<init>(PoolDeConexoes.java:13)
          at BDAccess.PoolDeConexoes.getInstance(PoolDeConexoes.java:21)
          at BDAccess.Main.main(Main.java:9)" 
       
      Porém, a IDE não me exibe nenhum erro semântico durante a digitação, então, o mais provável é que se trata de um erro lógico. 
      Abaixo estão as minhas classes, todas comentadas com o devido processo do pool de conexões, nos moldes solicitados pelo meu professor. 

       
      package BDAccess; import java.util.ArrayList; public class PoolDeConexoes { private static ArrayList<Conexao> conexoes; private static PoolDeConexoes pool; private PoolDeConexoes() { Conexao cn1 = new Conexao(); Conexao cn2 = new Conexao(); conexoes.add(cn1); conexoes.add(cn2); getConexao(); } public static PoolDeConexoes getInstance() { if(pool == null) { pool = new PoolDeConexoes(); } return pool ; } public Conexao getConexao() { if(conexoes == null) { Conexao c = new Conexao(); conexoes.add(c); return c; }else { for(Conexao s:conexoes) { if(s.isLivre()) { return s; } } } return null; } } Acima, a classe denominada: PoolDeConexoes.java

       
      package BDAccess; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class Conexao { private Connection cnx; private boolean livre; public Conexao() { this.livre = true; Parametros prm = Parametros.getInstance(); String driverJDBC = prm.getParametros("driverJdbc"); String urlBanco = prm.getParametros("urlBanco"); String nomeUsuario = prm.getParametros("nomeUsuario"); String senha = prm.getParametros("senha"); try { Class.forName(driverJDBC); System.out.println("Driver importado!"); cnx = DriverManager.getConnection(urlBanco, nomeUsuario, senha); System.out.println("Conexão estabelecida"); }catch (Exception e) { System.out.println("Conexão não estabelecida!"); } } public Connection getConnection() { return cnx; } public void reserva() { if(livre) { livre = false; }else { System.out.println("Esta conexão já está em uso!"); } } public void libera() { livre = true; } public boolean isLivre() { return livre; } } Acima, a classe com o objeto Conexão. 
      package BDAccess; import java.io.IOException; import java.util.ArrayList; public class Main { public static void main(String[] args) throws IOException{ PoolDeConexoes plc = PoolDeConexoes.getInstance(); System.out.println(plc.getConexao()); } } E aqui o meu método principal. 

      Agradeço desde já pelo auxílio de vocês sobre a minha questão. 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.