【问题标题】:mysql sub-query nested pass valuemysql子查询嵌套传值
【发布时间】:2017-05-03 02:54:58
【问题描述】:

我在 MySql 上有这个查询:

选择身份证,( 选择 IFNULL(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(tfo.a, tfo.da)))),'00:00') 作为速度 从 ( 选择不同的 gg_settimana,id_fascia FROM operatori_piano WHERE id_istruttore = o.id ) 作为 sa 左加入 tab_fasce_orarie 作为 tfo ON tfo.id = sa.id_fascia ) 作为节奏 FROM operatori as o 其中tipo = 2 AND attivo = 1

Mysql 返回此错误:

错误代码:1054。“where 子句”中的未知列“o.id”

我尝试了很多组合,但都不起作用。 需要您的帮助,非常感谢!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    发生的错误是由于您将 select 语句嵌套在查询中的 select 中,该查询将 o 命名为别名。别名仅在直接子查询中可见。

    如果没有关于您的架构的 很多 更多信息,则无法告知什么是正确的、有效的解决方案(使用我们对您的架构的了解生成查询很简单,它在语法上是正确的,但是它可能在功能上不正确)。但是,作为一般经验法则,尽量避免相关子查询(推送谓词)。除了通常不利于维护和性能之外,MySQL 在优化此类查询方面也很差。

    【讨论】:

      【解决方案2】:

      在子查询中不可见但查看代码的 o 别名可以避免使用内部连接引用外部选择

        SELECT id , ( 
      
            SELECT IFNULL(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(tfo.a,  tfo.da)))),'00:00')  as tempo
            FROM (
                SELECT DISTINCT gg_settimana, id_fascia 
                FROM operatori_piano
                INNER JOIN operatori as o ON  id_istruttore = o.id
                WHERE o.tipo = 2 AND o.attivo = 1
            ) as sa
            LEFT JOIN tab_fasce_orarie as tfo ON tfo.id = sa.id_fascia
      
        ) as tempo
        FROM operatori 
        WHERE tipo = 2 AND attivo = 1
      

      【讨论】:

        猜你喜欢
        • 2018-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-23
        • 2016-12-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多