MySql保留对SQL查询结果的重用
所以有两个问题:MySql保留对SQL查询结果的重用,mysql,sql,select,Mysql,Sql,Select,所以有两个问题: SELECT CurrencyRateID, Rate, Markup FROM currency_rate WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1) **A** AND DateTime = (SELECT MAX(DateTime) FROM currency_rate WHERE CurrencyID = **B**)
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1) **A** AND
DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = **B**)
检查currencyID列是否存在于currency表中,并以这种方式更改查询,以便可以在where子句中使用语句
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate cr inner join
(SELECT CurrencyID FROM currency WHERE BaseCurr = 1) **A**
ON cr.CurrencyID = a.CurrencyID
WHERE cr.DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = A.CurrencyID)
希望您的
currency\u rate
表有一个唯一的标识符列
如果有,您可以将查询A和B合并到WHERE子句中的单个查询中
SELECT
CurrencyRateID, Rate, Markup
FROM
currency_rate
WHERE
uniqueID = (
SELECT uniqueID
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
ORDER BY DateTime DESC LIMIT 1
)
如果没有,你可能只需要重复你自己
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
AND DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1))
注意:即使代码本身重复,MySQL也可能会注意到重复,并且只执行一次查询
编辑:
我刚刚注意到,您可以简化第一个选项,只使用子查询
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
ORDER BY DateTime DESC LIMIT 1
表
currency\u rate
是否有CurrencyID
列?是否复制/粘贴了该错误消息?如果是这样的话,您在某个地方拼错了该列,因为该错误将其称为currencyid
。请注意“r”,其中“n”应为be@Jonny:使用表别名,然后在每个CurrencyID之前指定别名以显式定义表的起始位置是的,我没有注意到,但问题是我复制了查询,看起来很好