【问题标题】:Error using column from main query in subquery在子查询中使用主查询中的列时出错
【发布时间】:2011-11-11 16:53:03
【问题描述】:

我不是高级 mysql 用户,所以你必须忍受我。

我试图在其中一个子查询中使用cref 变量,但我收到cref 列不存在的错误。如果我取出子查询,它将显示该列,因此该列肯定存在。

如果还有其他错误,请多多指教:)

SELECT DISTINCT
  (contractorsRef) AS cref,
  RIDGROUP AS ridg,
  (
    SELECT count(*) FROM (
      SELECT DISTINCT subcontractorRef
      FROM request
      INNER JOIN request_config
        ON request_config.RIDGROUP = request.RIDGROUP
      WHERE request_config.contractorsRef = cref  --### ERROR HERE
        AND currenttaxyear =2011
        AND weekno =31
  ) AS xx
) as xxx
FROM request_config
WHERE currenttaxyear =2011
  AND weekno =32
  AND contractorsRef <>132

【问题讨论】:

    标签: mysql select


    【解决方案1】:

    试试这个(请注意,我将外部选择中的 request_config 标记为 outer_config,并使用标签限定了内部选择中的引用

    SELECT DISTINCT (contractorsRef) AS cref, RIDGROUP AS ridg, 
        (select count(DISTINCT subcontractorRef)
        FROM request
        INNER JOIN request_config ON request_config.RIDGROUP = request.RIDGROUP
        WHERE request_config.contractorsRef = outer_config.contractorsRef 
        AND currenttaxyear =2011
        AND weekno =31) AS xxx
    FROM request_config outer_config
    WHERE currenttaxyear =2011
    AND weekno =32
    AND contractorsRef <>132
    

    编辑 请再试一次,我从子选择中删除了 1 个不必要的层

    【讨论】:

    • ,对不起。它说 #1054 - 'where 子句'nope 中的未知列'outer_config.contractorsRef'
    • 好的,你能再试一次吗?
    • 这是我最初所拥有的,但是 count(DISTINCT subcontractorRef) 导致查询缓慢,所以我读取了 count(*),然后使用子查询来加速它。还有其他想法吗?
    • 我明白了。在这种情况下,我真的建议您在新帖子中发布您的工作查询并询问如何加快速度。恕我直言,这个子查询不会加快速度。
    【解决方案2】:

    首先执行子查询,并将其结果用作外部查询的输入。因此,当您正在在外部查询中创建列 cref 时,当您执行子查询时,它尚不存在

    您可能可以通过合并这两个查询来解决您的问题。从您的子查询开始,并加入request_config。然后添加适当的条件和适当的列

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2019-12-22
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      相关资源
      最近更新 更多