【问题标题】:SQL NESTED JOIN NOT USING WHERESQL 嵌套连接不使用 WHERE
【发布时间】:2021-02-06 05:23:00
【问题描述】:

目前每种产品的价格是多少?显示产品代码、产品描述、单位及其当前价格。始终假设并非所有产品都有单价,但即使没有单价,您也需要显示它。不使用 WHERE 脚本

产品表

  1. 产品代码
  2. 说明
  3. 单位

价格表

  1. 产品代码
  2. effDate
  3. 单价

这是我的工作...请帮助我改进我的答案。

SELECT p.prodCode, p.description, p.unit, MAX(ph.unitPrice)  "Current Price" 
FROM product p 
INNER JOIN priceHist AS ph 
ON p.prodCode = ph.prodCode
GROUP BY p.prodCode, p.description, p.unit
ORDER BY MAX(ph.unitPrice); 

有人说我需要两次使用 PRICEHIST

【问题讨论】:

  • 你想改进什么?
  • 我认为我的脚本不完整或丢失。我无法回答上面的问题
  • 你想如何处理 prodCode 的多个 effDate?你能提供一些表格的示例数据吗?

标签: sql join group-by db2 sql-order-by


【解决方案1】:

用户窗口函数和left join:

select . . . -- whatever columns you want
from products p left join
     (select ph.*,
             row_number() over (partition by p.prodcode order by effdate desc) as seqnum
      from pricehist ph
     ) ph
     on ph.prodcode = p.prodcode and ph.seqnum = 1;

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT a.prodCode, a.description, a.unit, SUM(b.unitPrice)
    FROM ProductTable a
    LEFT JOIN PriceHistTable b ON a.prodCode = b.prodCode
    GROUP BY a.prodCode, a.description, a.unit, b.unitPrice
    

    【讨论】:

      【解决方案3】:

      假设您想为prodCode 选择unitPrice最新 effDate,下面的查询应该可以工作。 cmets 中的解释。

      select x.prodCode, x.description, x.unit, y.unitPrice
      from Product x
      left join (
         --- Create a table y with one row per (prodCode, effDate)
         --- choosing the latest effDate per prodCode
         select a.prodCode, a.effDate, a.unitPrice
         from PriceHist  a
         join (
             --- Create b as (prodCode, effDate)
             select prodCode, max(effDate) as maxEffDate
             from PriceHist
             group by prodCode
         ) b
         on a.prodCode = b.prodCode and a.effDate = b.maxEffDate
      ) y
      on x.prodCode = y.prodCode
      

      【讨论】:

      • 1.您必须在子选择中限定prodCode,因为a 和b 都有此列,否则会出现错误。最好对所有列进行限定,以免读者猜测哪个列属于哪个表。 2.“NOT ALL products HAVE unit price”短语暗示,当Product加入子选择的结果时,应该使用LEFT JOIN。
      • @MarkBarinstein 完成。感谢您的改进建议!
      猜你喜欢
      • 2019-07-01
      • 1970-01-01
      • 2013-03-03
      • 2018-07-22
      • 1970-01-01
      • 2021-06-16
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多