我被要求创建(起初)似乎是一个相当简单/直接的查询。但是,我遇到了一些由正在查询的表之间的链接关系引起的问题。以及来自各种不同表格的报告中包含的广泛数据。
这是一个 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 = '' 时的情况”来清除所有重复的条目并将其转换为空白。
从那以后,我已经解决了这篇文章关注的特定问题(连接)......并且已经转向了一组新的问题。因此,为了保持帖子主题,我将回答/关闭它。没有人质疑我最终加入表格的方式或提出“更正确”或更有效的方式,所以我想我所拥有的对于这种情况可以被认为是正确的。也许登陆此页面的其他人会发现我的可视化图表和随后的连接有助于可视化/连接他们自己的表格......谁知道呢。
无论如何,这对我有用: