子查询并为MySQL中的多个外键选择最旧的行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了子查询并为MySQL中的多个外键选择最旧的行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1540字,纯文字阅读大概需要3分钟。
内容图文
我有两张桌子:
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,
@price := (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中的多个外键选择最旧的行全部内容,希望文章能够帮你解决子查询并为MySQL中的多个外键选择最旧的行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。