【问题标题】:Getting error Subquery returns more than 1 row获取错误子查询返回超过 1 行
【发布时间】:2015-09-30 11:48:04
【问题描述】:

我正在尝试在 mysql 中编写以下查询:-

SELECT *
FROM eon.merged_monthly_energy_data
where consumption>0 
  and ((SELECT TIMESTAMPDIFF(YEAR, mmed.start_date, CURDATE()) AS difference 
        FROM merged_monthly_energy_data mmed) <1) ;

但是,我收到以下错误:-

错误代码:1242。子查询返回多于 1 行

我不确定为什么返回多个结果的子查询会在这里产生问题:-

【问题讨论】:

  • SELECT * FROM eon.merged_monthly_energy_data where consumption&gt;0 AND TIMESTAMPDIFF(YEAR, start_date, CURDATE()) &lt; 1
  • @lad2025 谢谢。它正在工作。但是,为什么它不能与子查询一起使用?为什么会出现这个错误?

标签: mysql sql


【解决方案1】:

你可以使用:

SELECT * 
FROM eon.merged_monthly_energy_data 
WHERE consumption>0 
  AND TIMESTAMPDIFF(YEAR, start_date, CURDATE()) < 1

您的原始查询不是逐行检查,而是检查整个表。您可以使用相关子查询来缓解它,但不需要这样:

SELECT *
FROM eon.merged_monthly_energy_data m
WHERE consumption>0 
  AND ((SELECT TIMESTAMPDIFF(YEAR, mmed.start_date, CURDATE()) AS difference 
        FROM merged_monthly_energy_data mmed 
        WHERE mmed.id = m.id) <1) ;

【讨论】:

    【解决方案2】:

    要查看错误代码1242的原因,只需将子查询替换为具有多个值的结果

    SELECT *
    FROM eon.merged_monthly_energy_data
    where consumption>0 
      and ('more than one value' <1);
    

    &lt; 运算符的操作数不兼容,子查询必须只返回一个结果。

    【讨论】:

    • 为什么要投反对票?无法将列表与单个值进行比较 - 这就是错误代码 1242 的原因 - 这个答案是对错误的解释,没有文字解决方案
    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多