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 / 276622
Accepted
boog
boog
Asked: 2020-10-07 06:55:09 +0800 CST2020-10-07 06:55:09 +0800 CST 2020-10-07 06:55:09 +0800 CST

Junção multidirecional difícil

  • 772

Estou sendo solicitado a criar o que (a princípio) parecia ser uma consulta bastante simples/direta. No entanto, estou enfrentando alguns problemas causados ​​pelas relações de link entre as tabelas que estão sendo consultadas. E a ampla gama de dados a serem incluídos no relatório de várias tabelas diferentes.

Este é um banco de dados postgresql que contém informações sobre cozinheiros que vendem alimentos. Simples o suficiente. O relatório solicitado consulta informações pessoais sobre os cozinheiros, seus menus disponíveis, itens alimentares nesses menus e a última vez que esse item foi comprado... dados que residem em 6-7 mesas diferentes.

Estou tendo muita dificuldade em juntar todas essas tabelas de uma maneira que retorne os dados de maneira aceitável. Aqui está uma visualização das tabelas com as quais estou trabalhando e seus relacionamentos de link:

insira a descrição da imagem aqui

Como você pode ver, tudo se origina e se vincula à entrada do usuário na tabela de contas. A partir daí, os vendedores têm uma entrada na tabela "loja", que liga a praticamente todo o resto:

  • As tabelas 'store_address' e 'address' contêm informações de endereço.
  • A tabela 'menu' contém os nomes dos menus - cada loja pode ter vários menus que oferecem determinados itens alimentares.
  • A tabela kitchen_item contém todos os itens alimentares específicos disponíveis em cada um dos vários menus.
  • A tabela 'menu_item' é o que é usado para vincular os itens de comida na mesa kitchen_item ao seu menu na mesa do menu.
  • 'orders' rastreia as informações do pedido para cada item vendido

Então, estou tendo problemas para juntar todas essas tabelas corretamente. Preciso mostrar cada vendedor (tabela de contas), suas informações pessoais (tabela de endereços), seus menus disponíveis (tabela de menus), os itens em cada um desses menus (tabela itens_cozinha) e a data da última venda desse item (tabela de pedidos).

Quando eu simplesmente deixei juntar tudo, cada menu possível contém todos os itens de comida possíveis... Tentei uma combinação de junções esquerdas, junções direitas, junções completas, etc... mas acho que este pode estar um pouco acima do meu nível de habilidade. .. dado o layout dos relacionamentos.

Então, alguém faria a gentileza de demonstrar que essas tabelas podem ser unidas?

as junções:

select 
account.id, account.email, account.firstname, account.lastname, 
address.address, address.address_2, address.city, address.state, 
menu.name, 
kitchen_item.name, 
orders.placed
from account
left join store on account.id = store.account_id
left join menu on store.id = menu.store_id
left join menu_item on menu.id = menu_item.menu_id
left join kitchen_item on (menu_item.kitchen_item_id = kitchen_item.id and store.id = kitchen_item.store_id)
left join orders on store.id = orders.store_id
join store_address on store.id = store.address.store_id
join address on store_address.address_id = address.id
group by table.value, table.value...

Quando executo a consulta com as tabelas unidas como acima, estão faltando entradas aleatórias ... e não tenho certeza do porquê.

Os dados são para um relatório. Tabular "tudo junto" ou dividido em áreas de assunto é bom - embora dividir em áreas de assunto possa parecer bom. O único requisito é uma coluna para cada ponto de dados.

A última parte que estou tentando realizar é juntar a tabela "orders" para obter a mais nova entrada única em orders.placed para cada linha/alimento já existente. Eu imagino que preciso escrever uma subconsulta?

Concordo completamente em dividir a consulta, embora esta seja estritamente a consulta que o indivíduo deseja. Eu acho que eles vão querer que eu implemente algum tipo de " case when rowcount() >1 = '' " para limpar todas as entradas duplicadas e transformá-las em espaço em branco.

postgresql join
  • 1 1 respostas
  • 88 Views

1 respostas

  • Voted
  1. Best Answer
    boog
    2020-10-07T17:25:50+08:002020-10-07T17:25:50+08:00

    Desde então, resolvi o problema específico no qual este post se concentrou (as junções) ... e passei para um novo conjunto de problemas com ele. Então, para manter o post no tópico, vou responder/fechar. Ninguém contestou a forma como acabei juntando as mesas ou sugeriu uma forma "mais correta" ou eficiente, então acho que o que tenho pode ser considerado correto para essa situação. Talvez alguém que chegue a esta página ache meu diagrama visual e as junções subsequentes úteis para visualizar/juntar suas próprias tabelas... quem sabe.

    De qualquer forma, isso é o que funcionou para mim:

    from account
    left join store on account.id = store.account_id
    left join menu on store.id = menu.store_id
    left join menu_item on menu.id = menu_item.menu_id
    left join kitchen_item on (menu_item.kitchen_item_id = kitchen_item.id and store.id = kitchen_item.store_id)
    join store_address on store.id = store_address.store_id
    join address on store_address.address_id = address.id
    
    • 0

relate perguntas

  • Qual é a diferença entre um INNER JOIN e um OUTER JOIN?

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

  • Como é a saída de uma instrução JOIN?

  • 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