• 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

    如有错误,请留言改正

  • 相关阅读:
    Java Web编程的主要组件技术——JSP
    Java Web编程的主要组件技术——Servlet
    closest()一个在评论里很有用的函数
    ThinkPHP I方法
    PHPstorm 的快捷键
    ThinkPHP的缓存 F方法
    console.log的使用
    选择使用接口和抽象类的依据
    OOP三类继承的区别
    Thinkphp C方法
  • 原文地址:https://www.cnblogs.com/raym/p/11577104.html
Copyright © 2020-2023  润新知