需要Mysql指南:)

需要Mysql指南:),mysql,Mysql,我有三张桌子: 配方//此配方包含配方中的项目 item//这些是已知项的列表。我们也在这里存储物品的起始价格 收据//这是物品的价格 此查询将返回配方中的商品名称和最新价格。 我对这个查询有问题。如果收据中没有该项目的记录,则该项目不会显示在我的列表中。如果收据中没有记录,那么如何从项目表返回带有起始价格的项目 SELECT i.name, r.price FROM recipe_items ri JOIN receipt r ON (ri.item = r.item) JOIN item

我有三张桌子:

  • 配方//此配方包含配方中的项目
  • item//这些是已知项的列表。我们也在这里存储物品的起始价格
  • 收据//这是物品的价格
此查询将返回配方中的商品名称和最新价格。 我对这个查询有问题。如果收据中没有该项目的记录,则该项目不会显示在我的列表中。如果收据中没有记录,那么如何从
项目
表返回带有起始价格的项目

SELECT i.name, r.price
FROM recipe_items ri
JOIN receipt r ON (ri.item = r.item)
JOIN item i ON (ri.item = i.id)
LEFT OUTER JOIN receipt r1 ON (r.item = r1.item AND 
     (r.date < r1.date OR r.date = r1.date AND r.id < r1.id)) 
WHERE r1.id IS NULL AND ri.recipe_id = 2
GROUP BY ri.item
选择i.name,r.price
来自配方_项目ri
加入收据r ON(ri.item=r.item)
连接上的项目i(ri.item=i.id)
左侧外部连接收据r1打开(r.item=r1.item和
(r.date
这就是你想要的吗

SELECT i.name, IFNULL(r.price,i.price) as price
FROM recipe_items ri
INNER JOIN item i ON (ri.item = i.id)
LEFT OUTER JOIN receipt r USING item
WHERE ri.recipe_id = 2
GROUP BY ri.item
ORDER BY r.date 

将您的联接添加到
r
表的左侧联接,如
r1
is。您已经解决了这个问题的大部分。@scragar非常感谢您,这是一个令人沮丧的错误,这就是解决方案。请写几行回答我好吗?