AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 325014
Accepted
MJM
MJM
Asked: 2023-03-22 11:20:13 +0800 CST2023-03-22 11:20:13 +0800 CST 2023-03-22 11:20:13 +0800 CST

Incompatibilidade entre o número total de linhas em uma junção sql

  • 772

Quando uno as entradas da tabela de pontos (n = 34, 436) à tabela mid_pts (n = 1,98 milhão), o número total de linhas de table_joined é n = 26.016. No entanto, quando adiciono a tabela unjoined_pts de n = 9.627 ao table_joined, ela não corresponde ao número da tabela 'point' original, excede-a em 1207.

Seguem exemplos das tabelas que possuo:

tabela de pontos:

LIC_LI_NO DESCRITOR Atributo 1 Atributo 2 Atributo 3
11112-01 04-81-09-01 xx xyz xx
11112-01 04-81-09-01 xyz x x
11119-03 04-81-09-01 xx xx xyz
11117-05 04-81-09-01 xx xyz xyz

tabela mid_pts

LIC_LI_NO ORIG_LICLI DESCRITOR
11112-01 11112-01 04-81-09-01
11112-01 11112-01 04-81-09-01
11119-03 11119-03 04-81-09-01
129517-05 11117-05 04-81-09-01
10000-01 10000-01 04-81-09-01
100232-01 100232-01 04-81-09-01
19-03 19-03 04-81-09-01
117-05 117-05 04-81-09-01
112-01 112-01 04-81-09-01

A tabela abaixo é o que eu esperava, mas por algum motivo, conforme sugerido por Laurenz Albe, uma única linha na minha tabela de pontos pode estar relacionada a várias linhas na tabela mid_pts. Eu gostaria que cada linha na tabela de pontos se juntasse a apenas uma linha de candidato na tabela mid_pts.

table_joined

LIC_LI_NO ORIG_LICLI DESCRITOR Atributo 1 Atributo 2 Atributo 3
11112-01 11112-01 04-81-09-01 xx xyz xx
11112-01 11112-01 04-81-09-01 xyz x x
11119-03 11119-03 04-81-09-01 xx xx xyz
129517-05 11117-05 04-81-09-01 xx xyz xyz
CREATE TABLE table_joined AS
        SELECT m.geom, m.lic_li_no, m.orig_licli, p.id, p.descriptor, ... 
        FROM mid_pts m
        JOIN point p            
            ON CASE                                                     
            WHEN p.lic_li_no = m.lic_li_no THEN 1
            WHEN p.lic_li_no = m.orig_licli THEN 1
            ELSE 0 END = 1
            AND 
            (p.descriptor = m.descriptor)
    ;

Quando avaliado quantos pontos não juntaram, obtenho 9.627.

CREATE TABLE unjoined_pts AS 
        SELECT
        p.*
        FROM point p                                                  
        WHERE NOT EXISTS (SELECT * FROM  table_joined m 
                          WHERE m.id = p.id)                    
;
postgresql
  • 1 1 respostas
  • 52 Views

1 respostas

  • Voted
  1. Best Answer
    Erwin Brandstetter
    2023-03-23T12:08:43+08:002023-03-23T12:08:43+08:00

    Eu gostaria que cada linha da pointstabela se juntasse a apenas uma linha candidata na mid_ptstabela.

    Solução simples:

    SELECT DISTINCT ON (p.ctid)
           m.geom, m.lic_li_no, m.orig_licli, p.id, p.descriptor, ... 
    FROM   point p
    JOIN   mid_pts m USING (descriptor)
    WHERE  p.lic_li_no IN (m.lic_li_no, m.orig_licli);
    

    Isso seleciona uma linha arbitrária entre as linhas correspondentes mid_ptspara cada linha qualificada na tabela point- se houver alguma correspondência após o INNER JOIN. (Você pode querer LEFT JOINpreservar pontos sem correspondência? Mova as expressões de filtro para a cláusula de junção neste caso.)

    Como você não divulgou as definições da tabela, estou voltando ctidpara identificar as linhas de maneira exclusiva. (Use o PK se houver um.)

    Para suas poucas partidas por ponto (perto de uma), DISTINCT ONdeve ter um desempenho muito bom. Ver:

    • Selecione a primeira linha em cada grupo GROUP BY?

    Sobre ctid:

    • A coluna do sistema "ctid" é legítima para identificar linhas a serem excluídas?
    • 1

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve