clickhouse创建视图SQL 错误 [47]: ClickHouse exception, code: 47

使用clickhouse创建视图时报错

SQL 错误 [47]: ClickHouse exception, code: 47, host: localhost, port: 8123; Code: 47, e.displayText() = DB::Exception: Missing columns:xxx    required columns:  yyy

因为多张表内有相同名称的字段,所以在创建视图时的子查询里用到了别名,其实SQL语句在直接运行查询时是可以正常运行的,

例如 :

--查询可以正常执行
SELECT
  A.ID AS AID,B.ID AS BID
FROM
  TA AS A
INNER JOIN
  TB AS B ON 1=1

--创建视图报错
CREATE VIEW V_TEST AS
SELECT
  A.ID AS AID,B.ID AS BID
FROM
  TA AS A
INNER JOIN
  TB AS B ON 1=1

查找官网文档中CREATE VIEW中没找到特殊的说明,只是在查询相关的文档中找到两个地方对别名的提示,抱着试试看的态度对语句进行了修改

 

FROM 子句

可以使用包含在括号里的子查询来替代表。 在这种情况下,子查询的处理将会构建在外部的查询内部。 不同于SQL标准,子查询后无需指定别名。为了兼容,你可以在子查询后添加‘AS 别名’,但是指定的名字不能被使用在任何地方。

JOIN 子句

子查询不允许您设置别名或在其他地方引用它们。 USING中指定的列必须在两个子查询中具有相同的名称,而其他列必须具有不同的名称。您可以通过使用别名的方式来更改子查询中的列名(示例中就分别使用了'hits'与'visits'别名)。

 

--修改后的SQL
CREATE VIEW V_TEST AS
SELECT
  AID,BID
FROM
  (SELECT ID AS AID FROM TA) AS A
INNER JOIN
  (SELECT ID AS BID FROM TB) AS B ON 1=1

如有错误,请留言改正

posted @ 2019-09-24 10:57  RAY_M  阅读(7116)  评论(0编辑  收藏  举报