【问题标题】:Complicated condition in JOINJOIN 中的复杂条件
【发布时间】:2013-09-04 13:16:41
【问题描述】:

我有一个表产品,第二个价格。一种产品可以有多个价格。

餐桌产品的重要栏目

身份证、姓名

表格价格的重要列

可用性、价格、供应商 ID

我需要可用性 > 0 且价格最低的 JOIN Price。

有关性能的更多详细信息:

  • 超过百万种产品意味着更高的价格
  • 索引在 pri.ProductId 上,但可以添加到更多

我还需要能够按产品名称或价格订购这些结果

类似:

SELECT * FROM Products pro 
JOIN Prices pri ON pri.ProductId = pro.Id 
AND MIN(pri.Price) AND pri.Availability > 0

【问题讨论】:

  • 您的意思是说价格低于另一张桌子的价格吗? LOWER() 是一个 Mysql 字符串函数,用于转换为小写... dev.mysql.com/doc/refman/5.0/en/…
  • 更低的价格是什么? LOWER 将字符串转换为小写...
  • 对不起,我的错误,现在它被编辑为 MIN()
  • 为避免混淆,考虑提供一个sqlfiddle

标签: mysql sql


【解决方案1】:
SELECT * 
FROM Products pro 
JOIN 
(
  select ProductId, min(Price) as mprice, Availability
  from Prices
  where Availability > 0
  group by ProductId 
) pri on pri.ProductId = pro.Id 

【讨论】:

  • 此选择是否与最低价格对应的可用性?无论如何,我有超过一百万的产品和超过一百万的价格,所以我认为这是非常无效的。
  • ..假设只有两种可用性
  • availability 可以是 0,也可以是 1,2,3,4 等。
  • @PetrVelký:请在您的问题中添加所有必要的信息。由于这也是一个性能问题,您应该添加表结构(带索引)、示例数据和预期输出。
猜你喜欢
  • 2015-11-23
  • 2019-09-04
  • 2013-04-11
  • 2012-03-31
  • 2013-01-31
  • 2012-09-02
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多