SQL:以一对多关系选择特定记录

时间:2017-10-19 12:21:23

标签: mysql sql performance database-performance query-performance

假设我有一张顾客表和一张购买表。

客户可以多次购物。有些时候,客户购买旧商品以及购物功能。

在这种情况下,我需要显示最新的旧购买。如果客户只购买功能,我应该展示一个。

我写过查询,但我认为我们可以改进什么是最佳做法?有关此查询的任何建议吗?

考虑以下表格:

  • customer:id,name
  • 购买:id,customer_id,item_id,effective_from_date

查询

SELECT c.*, p.*
FROM customer c
INNER JOIN purchase p
ON p.id =
(IF((SELECT Count(*) FROM purchase p1 WHERE  p1.customer_id = c.id) <= 1,
(SELECT p2.id FROM   purchase p2 WHERE  p2.customer_id = c.id),
(SELECT p3.id FROM purchase p3 WHERE p3.customer_id=c.id AND
p3.effective_from_date < now() 
ORDER BY id DESC LIMIT 1)))

0 个答案:

没有答案