使用 Where 子句从视图中选择以引用另一个数据库 - 未知列错误

Posted

技术标签:

【中文标题】使用 Where 子句从视图中选择以引用另一个数据库 - 未知列错误【英文标题】:Select from View using Where clause to refer to another database - Unknown Column error 【发布时间】:2012-10-31 04:30:37 【问题描述】:

我正在尝试从我创建的视图中选择某些值。声明如下:

SELECT * FROM dashboard.team
WHERE ac2012.acx_users.id = 1;

如您所见,这里引用了 2 个数据库:

    仪表板数据库、团队表 ac2012 数据库,acx_users.id 表

ac2012.acx_users.id 是原始 Create View 语句中的正则表达式,我正在使用它,因为我当然不能在 Where 子句中使用 ALIAS...但是,这显示错误:

Error Code 1054: Unknown column 'ac2012.acx_users.id' in 'where clause'

我不确定如何让它工作,因为在这种情况下我需要引用其他数据库,但它无法识别数据库。任何提示将不胜感激。

【问题讨论】:

列名中有.吗? 做吧`tablename`。 `column name ` 不,仪表板是数据库,团队是表。而ac2012是数据库,acx_users是表,id是列名 ac2012.acx_users.id is the regular expression in the original Create View statement是什么意思? 【参考方案1】:

由于您是从视图中进行选择,因此基础数据库不再可见。您只能看到视图呈现的内容,作为视图所在的数据库的一部分,因此请尝试WHERE acx_users.id = 1,或者您在视图定义中将该字段别名的任何内容。

【讨论】:

我尝试使用 Alias: WHERE 'User ID' = 1 ,但是它没有返回任何结果,即使我看到该列的值是 1 的许多条目。我的语法好吗? 如果您的查询中确实是带有单引号的'User ID',那么您实际上是在比较一个 STRING,其值为“用户 ID”,而不是字段名称。字段名称使用反引号进行转义,而不是单引号。单引号中的任何内容都立即只是一个字符串,而不是表/字段/任何值。【参考方案2】:
    SELECT * FROM dashboard.team
    LEFT OUTER JOIN ac2012 ON ac2012.CommonColumnName=dashboard.CommonColumnName
    WHERE ac2012.acx_users.id = 1;

======================= 请替换为原始列名...

【讨论】:

以上是关于使用 Where 子句从视图中选择以引用另一个数据库 - 未知列错误的主要内容,如果未能解决你的问题,请参考以下文章

从另一个表的数组中的table where子句中选择

如何使用 where/have 子句选择唯一行并与另一个表进行比较

Linq to Entities 添加 Where 子句以在另一个表中查找 EXISTS

SQL - 在另一个 SELECT 的 WHERE 子句中使用 SELECT

如何在 VIEW 中获取单个字段以在 WHERE 中使用

Where 子句不适用于 ClickHouse 视图