Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql保留对SQL查询结果的重用_Mysql_Sql_Select - Fatal编程技术网

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**)
  • 为什么这个问题给了我一个答案 错误代码:1054。“字段列表”中的未知列“currencyid”
  • 如何使用B中第一个SELECT语句A的结果

  • 检查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之前指定别名以显式定义表的起始位置是的,我没有注意到,但问题是我复制了查询,看起来很好