子查询的MySQL别名不起作用

子查询的MySQL别名不起作用,mysql,alias,Mysql,Alias,我将这段代码写入MySQL终端,但MySQL会使用 “错误1054(42S22):“on子句”中的未知列“a.SD_ID” 我不知道为什么它不明白我的别名 SELECT t.TBL_NAME AS 'TABLE', t.TBL_TYPE AS 'TYPE', a.COLUMN_NAME AS 'COLUMN_NAME', a.TYPE_NAME AS

我将这段代码写入MySQL终端,但MySQL会使用 “错误1054(42S22):“on子句”中的未知列“a.SD_ID”

我不知道为什么它不明白我的别名

SELECT  t.TBL_NAME              AS 'TABLE',
t.TBL_TYPE                      AS 'TYPE',
a.COLUMN_NAME                   AS 'COLUMN_NAME',
a.TYPE_NAME                     AS 'TYPE'
   FROM TBLS t
   JOIN
       (SELECT c.TYPE_NAME, c.COLUMN_NAME, c.CD_ID
           FROM COLUMNS_V2 c, SDS s
           WHERE c.CD_ID = s.CD_ID) a
   ON t.SD_ID = a.SD_ID
WHERE t.TBL_TYPE = 'MANAGED_TABLE'
ORDER BY b.TBL_NAME, b.INTEGER_IDX; 

我在Ubuntu系统上的MySQL上查询这个

您需要在
子查询
中包含
SD\u ID
列。检查下面的注释行。也更喜欢ANSI样式的联接:

SELECT  
 t.TBL_NAME    AS 'TABLE',
 t.TBL_TYPE    AS 'TYPE',
 a.COLUMN_NAME AS 'COLUMN_NAME',
 a.TYPE_NAME   AS 'TYPE'
FROM TBLS t
  INNER JOIN
     (SELECT c.TYPE_NAME, c.COLUMN_NAME, c.CD_ID -- include either c.SD_ID or s.SD_ID
      FROM COLUMNS_V2 c 
      inner join SDS s
      on c.CD_ID = s.CD_ID
     ) a
   ON t.SD_ID = a.SD_ID
WHERE t.TBL_TYPE = 'MANAGED_TABLE'
ORDER BY b.TBL_NAME, b.INTEGER_IDX; 

您需要在子查询中包含
SD\u ID
列。检查下面的注释行。也更喜欢ANSI样式的联接:

SELECT  
 t.TBL_NAME    AS 'TABLE',
 t.TBL_TYPE    AS 'TYPE',
 a.COLUMN_NAME AS 'COLUMN_NAME',
 a.TYPE_NAME   AS 'TYPE'
FROM TBLS t
  INNER JOIN
     (SELECT c.TYPE_NAME, c.COLUMN_NAME, c.CD_ID -- include either c.SD_ID or s.SD_ID
      FROM COLUMNS_V2 c 
      inner join SDS s
      on c.CD_ID = s.CD_ID
     ) a
   ON t.SD_ID = a.SD_ID
WHERE t.TBL_TYPE = 'MANAGED_TABLE'
ORDER BY b.TBL_NAME, b.INTEGER_IDX; 

您忘记将添加到子查询中选择的s.SD\U ID或c.SD\U ID中。为什么
来自列c,SDS s
?逗号分隔的联接在1992年变得多余。那是MySQL还没有出现之前的事。改为使用显式ANSI连接(
来自列_v2c JOIN SDS ON…
)。为什么要使用
SDS
连接?您仅在子查询中选择
列的值。加入的目的是什么?您忘了在子查询中选择s.SD\U ID或c.SD\U ID添加HY
来自列c,SDS s
?逗号分隔的联接在1992年变得多余。那是MySQL还没有出现之前的事。改为使用显式ANSI连接(
来自列_v2c JOIN SDS ON…
)。为什么要使用
SDS
连接?您仅在子查询中选择
列的值。加入的目的是什么?