【问题标题】:Messing with joins, I want to get 2 tables data搞乱连接,我想得到 2 个表数据
【发布时间】:2017-07-22 16:30:07
【问题描述】:

已编辑!!

我正在努力从表中获取我的数据,但我没有运气。

我的查询

SELECT CODES.CODE, WARE.QTY
FROM   CODES 
LEFT JOIN WARE ON WARE.ID = CODES.ID
GROUP  BY CODES.CODE , WARE.QTY
ORDER BY CODES.CODE

我的代码表是

CODE          |ID
--------------|-----------
1402201700006 | 123  
1102201700006 | 124  

我的商品桌是

QTY           |ID
--------------|-----------
12            | 123
1             | 123
2             | 124
1             | 124

我的结果是

CODE          |QTY
--------------|---------
123           |12
123           |1
124           |2
124           |1

而不是

CODE          |QTY
--------------|---------
123           |13
124           |3

【问题讨论】:

  • 请显示表的DDL并在您的deta模型中描述它们的含义,添加涉及的表的示例内容,查询的预期结果和查询的实际结果。例如,我怀疑您正在查询名为warehouse 的表以获取商品的 SKU。我会更早地从名为item 的表中期待这一点。如果warehouse 将项目存储在您的仓库中,则每个项目可能有多个记录(例如,每个仓库、每个存储的物理项目、每个存储位置等)。
  • 您的仓库将不同的 SKU 归于同一商品(似乎不切实际)。在这种情况下你想发生什么?
  • 没有更多信息,我注意到,在第一个查询中您使用 items.HEID = 'a78fa8a3' 和第二个 items.id = 'a78fa8a3'。此外,您在加入购物篮时使用 items.itemid... 那么您的 items 表中有多少个 id? :) 可能会有所作为
  • @InnaTichman 是的,你是对的,我编辑我的问题并更改为 .id ,发生这种情况是因为我想提供一个简单易懂的查询,而不是我真正的查询
  • @MarkRotteveel 是的!我在该表中的每个项目都有多个记录。但它是我能在我的查询中找到的唯一表。 :(

标签: sql join inner-join firebird


【解决方案1】:

我认为这是因为“仓库”表对于“项目”表中的每个“id”都有多行。

所以你可以使用下面的查询:

SELECT items.name, color.color, size.size, SUM(basket.qty), warehouse.item_sku 
FROM items
INNER JOIN basket ON items.itemid = basket.itemid
INNER JOIN attributes color ON basket.attr1 = color.id
INNER JOIN attributes size ON basket.attr2 = size.id
INNER JOIN (select warehouse.itemid, max(warehouse.item_sku) item_sku from warehouse group by warehouse.itemid)warehouse ON items.id = warehouse.itemid
WHERE items.id = 'a78fa8a3'
GROUP BY items.name, color.color, size.size , warehouse.item_sku

【讨论】:

  • 是的,这个表可能每个产品都有多次!
  • 我已编辑查询以获取每个 itemId 的 max(item_sku)
猜你喜欢
  • 1970-01-01
  • 2015-04-06
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多