Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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:连接表本身。未知列_Mysql_Inner Join_Database Table - Fatal编程技术网

MySQL:连接表本身。未知列

MySQL:连接表本身。未知列,mysql,inner-join,database-table,Mysql,Inner Join,Database Table,疯了 在Access上工作,在MySQL上不需要。我在这里的一个帖子上玩了这个把戏 以下是查询: SELECT A.B_ID, B.CNT_B, B.MAX_PRICE, B.SUM_AB, B.SUM_C_AB, B.UNIQUE_B, B.Costi, B.COUNTDOWN, A.AUCT_ID FROM MONITOR AS A INNER JOIN (SELECT B_I

疯了

在Access上工作,在MySQL上不需要。我在这里的一个帖子上玩了这个把戏

以下是查询:

SELECT A.B_ID,
       B.CNT_B,
       B.MAX_PRICE,
       B.SUM_AB,
       B.SUM_C_AB,
       B.UNIQUE_B,
       B.Costi,
       B.COUNTDOWN,
       A.AUCT_ID
FROM MONITOR AS A
INNER JOIN
  (SELECT B_ID,
          COUNT(B_ID) AS CNT_B,
          MAX(PREZZO_ATTUALE) AS MAX_PRICE,
          SUM(TOT_PUNT_AB) AS SUM_AB,
          SUM(TOT_CAMBI_AB) AS SUM_C_AB,
          (CNT_B-SUM_AB) AS UNIQUE_B,
          (0.035*3*CNT_B+MAX_PRICE) AS COSTI,
          45-SUM(CONT_PROVV_AB) AS COUNTDOWN
   FROM MONITOR
   WHERE AUCT_ID = '123456789'
   GROUP BY B_ID) AS B
  ON A.B_ID= B.B_ID
WHERE A.AUCT_ID = '123456789'
ORDER BY B.MAX_PRICE DESC,
         B.CNT_B DESC
显示

错误:[MySQL][ODBC 3.51驱动程序][mysqld-5.5.33-31.1-log]未知列 “字段列表”中的“CNT_B”

如果我离开CNT_B,它会告诉我最高价格等等

我敢肯定。这是一个内心的诅咒

带着错误


解决方案

我不能在同一个子查询中使用别名值

因此,新的有效查询是:

   SELECT A.B_ID,
           B.CNT_B,
           B.MAX_PRICE,
           B.SUM_AB,
           B.SUM_C_AB,
           B.UNIQUE_B,
           B.Costi,
           B.COUNTDOWN,
           A.AUCT_ID
    FROM MONITOR AS A
    INNER JOIN
      (SELECT B_ID,
              COUNT(B_ID) AS CNT_B,
              MAX(PREZZO_ATTUALE) AS MAX_PRICE,
              SUM(TOT_PUNT_AB) AS SUM_AB,
              SUM(TOT_CAMBI_AB) AS SUM_C_AB,
              (COUNT(B_ID)-SUM(TOT_PUNT_AB)) AS UNIQUE_B,
              (0.035*3*COUNT(B_ID)+MAX(PREZZO_ATTUALE)) AS COSTI,
              45-SUM(CONT_PROVV_AB) AS COUNTDOWN
       FROM MONITOR
       WHERE AUCT_ID = '123456789'
       GROUP BY B_ID) AS B
      ON A.B_ID= B.B_ID
    WHERE A.AUCT_ID = '123456789'
    ORDER BY B.MAX_PRICE DESC,
             B.CNT_B DESC

谢谢


Oscar

你能试试这个吗,它不引用
C
表:

SELECT A.B_ID,
       B.CNT_B,
       B.MAX_PRICE,
       B.SUM_AB,
       B.SUM_C_AB,
       B.UNIQUE_B,
       B.Costi,
       B.COUNTDOWN,
       A.AUCT_ID
FROM MONITOR AS A
INNER JOIN
  (SELECT B_ID,
          COUNT(B_ID) AS CNT_B,
          MAX(PREZZO_ATTUALE) AS MAX_PRICE,
          SUM(TOT_PUNT_AB) AS SUM_AB,
          SUM(TOT_CAMBI_AB) AS SUM_C_AB,
          (CNT_B-SUM_AB) AS UNIQUE_B,
          (0.035*3*CNT_B+MAX_PRICE) AS COSTI,
          45-SUM(CONT_PROVV_AB) AS COUNTDOWN
   FROM MONITOR
   WHERE AUCT_ID = '123456789'
   GROUP BY B_ID) AS B
  ON A.B_ID= B.B_ID
WHERE A.AUCT_ID = '123456789'
ORDER BY B.MAX_PRICE DESC,
         B.CNT_B DESC

从子查询上移到主查询,如下所示:

 (CNT_B-SUM_AB) AS UNIQUE_B,
 (0.035*3*CNT_B+MAX_PRICE) AS COSTI,
因为您正试图从
计算聚合
函数本身调用别名

因此,您将有:

SELECT A.B_ID,
   B.CNT_B,
   B.MAX_PRICE,
   B.SUM_AB,
   B.SUM_C_AB,
   B.CNT_B-B.SUM_AB AS UNIQUE_B,
   (0.035*3*B.CNT_B+B.MAX_PRICE) AS COSTI,
   B.COUNTDOWN,
   A.AUCT_ID
FROM MONITOR A
INNER JOIN
 (SELECT B_ID,
      COUNT(B_ID) AS CNT_B,
      MAX(PREZZO_ATTUALE) AS MAX_PRICE,
      SUM(TOT_PUNT_AB) AS SUM_AB,
      SUM(TOT_CAMBI_AB) AS SUM_C_AB,
      45-SUM(CONT_PROVV_AB) AS COUNTDOWN
FROM MONITOR
WHERE AUCT_ID = '3453015'
GROUP BY B_ID) B
ON A.B_ID= B.B_ID
WHERE A.AUCT_ID = '3453015'
ORDER BY B.MAX_PRICE DESC,
     B.CNT_B DESC

请参见C.MAX\u PRICE从何而来?来自
SHOW CREATE TABLE MONITOR
的结果会很好,但我注意到,当未指定
C
表时,您的查询引用了
C.MAX\u PRICE
,因此这应该是固定的。Doh,sniped。我编辑了带有更正的帖子,并用SQLfiddle作为错误示例。它是一样的。我做了一把小提琴。不知道你说的“它是一样的”是什么意思。还有错误吗?我建议的更改没有显示错误。抱歉,zanlok,但是如果我复制/粘贴您的查询,它会给出相同的错误。也许我遗漏了什么。无论如何,我通过对每个子查询进行测试来解决这个问题。如果你看这里,你可以看到给我的错误,我解决了它,避免使用值​​同一子查询中别名的数目。事实上,如果您看到您的查询,例如“(0.035*3*CNT_B+MAX_PRICE)AS COSTI”[istead of“(0.035*3*COUNT(B_ID)+MAX(PREZZO_ATTUALE)AS COSTI”]尝试使用在同一查询中生成的CNT_B和MAX_PRICE的值。这与我的第一次查询“相同”。