gpt4 book ai didi

sql - 子查询并为 MySQL 中的多个外键选择最旧的行

转载 作者:可可西里 更新时间:2023-11-01 07:33:51 26 4
gpt4 key购买 nike

我有两个表:

product (idproduct, name, description, tax)

product_storage (idstorage, idproduct, added, quantity, price)

对于每个产品,它可能有不同的价格,最旧的是“先到先得”

例如在存储中我有:

1, 1, 2010-01-01,  0, 10.0
2, 1, 2010-01-02, 0, 11.0
3, 1, 2010-01-03, 10, 12.0
4, 2, 2010-01-04, 0, 12.0
5, 2, 2010-01-05, 10, 11.0
6, 2, 2010-01-06, 10, 13.0
7, 3, 2010-01-07, 10, 14.0
8, 3, 2010-01-08, 10, 16.0
9, 3, 2010-01-09, 10, 13.0

现在我需要选择所有具有当前价格的产品,它位于 product_storage 中最旧的行中,其中每个产品的数量 > 0:

SELECT p.idproduct, p.name, p.tax,
(SELECT s.price
FROM product_storage s
WHERE s.idproduct=p.idproduct AND s.quantity > 0
ORDER BY s.added ASC
LIMIT 1) AS price
FROM product p;

工作正常,但当我想在查询中计算含税价格时却不行:

SELECT p.idproduct, p.name, p.tax,
(SELECT s.price
FROM product_storage s
WHERE s.idproduct=p.idproduct AND s.quantity > 0
ORDER BY s.added ASC
LIMIT 1) AS price,
(price * (1 + tax/100)) AS price_with_tax
FROM product p;

MySQL 说:

Unknown column 'price' in 'field list'

更新

将子查询用作表几乎可以解决问题(查看答案)- 现在唯一的问题是如何从 product_storage 中为多个外键选择最旧的行(每个 idproduct 一个且只有一个)。

更新 2

感谢 cmptrgeekken 提供了很好的解决方案:))

最佳答案

将子查询用作表可能会更好:

SELECT p.idproduct, p.name, p.tax, s.price, (s.price * (1 + p.tax/100)) as price_with_tax
FROM product p
INNER JOIN (SELECT idproduct, price
FROM product_storage
WHERE quantity > 0) s
ON p.idproduct = s.idproduct
INNER JOIN (SELECT idproduct, MIN(added) min
FROM product_storage
GROUP BY idproduct) f
ON s.idproduct = f.idproduct AND s.added = f.min

编辑:已更新,因为税在另一个表中,所以我不得不移动该计算的位置。

编辑 2:好的,再次进行更改以尝试正确过滤 product_storage 表。

关于sql - 子查询并为 MySQL 中的多个外键选择最旧的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2409597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com