AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 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

困难的多向连接

  • 772

我被要求创建(起初)似乎是一个相当简单/直接的查询。但是,我遇到了一些由正在查询的表之间的链接关系引起的问题。以及来自各种不同表格的报告中包含的广泛数据。

这是一个 postgresql 数据库,其中包含有关销售食品的厨师的信息。很简单。请求的报告查询有关厨师的个人信息、他们的可用菜单、这些菜单上的食物项目以及上次购买该项目的时间……位于 6-7 个不同表中的数据。

我很难以一种可以接受的方式返回数据的方式将所有这些表连接在一起。这是我正在使用的表及其链接关系的可视化:

在此处输入图像描述

如您所见,一切都源自并链接回帐户表上的用户条目。从那里,卖家在“商店”表上有一个条目,它链接到几乎所有其他内容:

  • “store_address”和“address”表包含地址信息。
  • 'menu' 表包含菜单的名称——每家商店可以有多个菜单,提供特定的食物。
  • kitchen_item 表包含每个不同菜单上可用的所有特定食物项目。
  • 'menu_item' 表用于将 kitchen_item 表上的食物项目链接到菜单表上的菜单。
  • “订单”跟踪每件售出商品的订单信息

所以我无法正确地将所有这些表连接在一起。我需要能够显示每个卖家(帐户表)、他们的个人信息(地址表)、他们的可用菜单(菜单表)、每个菜单上的项目(kitchen_items 表)以及该项目的最后销售日期(订单表)。

当我简单地左连接所有内容时,每个可能的菜单都包含所有可能的食物……我尝试了左连接、右连接、完全连接等的组合……但我认为这可能比我的技能水平高一点。 ..给定关系的布局。

那么,有人会好心地证明这些表可以连接在一起吗?

连接:

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...

当我使用上面连接的表运行查询时,它只是缺少随机条目......我不知道为什么。

数据用于报告。表格“一切都在一起”或分成主题区域很好 - 尽管分成主题区域可能看起来不错。唯一的要求是每个数据点都有一列。

我要完成的最后一部分是加入表“订单”以获得orders.placed 中每个已经存在的行/食品项目的最新单个条目。我想我需要写一个子查询?

我完全同意拆分查询,尽管这严格来说是个人想要的查询。我猜他们会希望我实现某种“当 rowcount() >1 = '' 时的情况”来清除所有重复的条目并将其转换为空白。

postgresql join
  • 1 1 个回答
  • 88 Views

1 个回答

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

    从那以后,我已经解决了这篇文章关注的特定问题(连接)......并且已经转向了一组新的问题。因此,为了保持帖子主题,我将回答/关闭它。没有人质疑我最终加入表格的方式或提出“更正确”或更有效的方式,所以我想我所拥有的对于这种情况可以被认为是正确的。也许登陆此页面的其他人会发现我的可视化图表和随后的连接有助于可视化/连接他们自己的表格......谁知道呢。

    无论如何,这对我有用:

    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

相关问题

  • INNER JOIN 和 OUTER JOIN 有什么区别?

  • 存储过程可以防止 SQL 注入吗?

  • JOIN 语句的输出是什么样的?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve