【问题标题】:MySQL can run select * query but not select column on viewMySQL 可以运行 select * 查询,但不能在视图中选择列
【发布时间】:2013-09-14 20:39:21
【问题描述】:

(已解决。请参阅下面的答案)

我使用以下查询创建了一个视图:

SELECT TableA.ColA as ColA, User.ID as UserID, User.FirstName, User.LastName, User.Email, TableC.ID as RoleID, TableC.Name as Role FROM Permission
LEFT JOIN TableB ON TableA.ColA = TableB.ID
LEFT JOIN TableD ON TableD.ID = TableB.OrganizationID
LEFT JOIN User ON User.ID = TableA.UserID
LEFT JOIN TableC ON TableC.ID = TableA.RoleID
WHERE User.Active = 1 AND (TableA.ResourceType = 1
OR (TableA.ResourceType = 5 AND TableD.ID = TableB.OrganizationID))
OR User.Active = 1 AND TableC.ID = 1
ORDER BY ColA, UserID ASC

视图已成功创建并按预期工作。我可以毫无问题地在视图上执行SELECT * ON view_test。但是,如果我尝试从视图中选择特定列,例如 SELECT ColA FROM view_test,则会返回以下错误消息:

#1356 - View 'database.view_test' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

我运行它的帐户是 root,如果由于某种原因出现问题,我已重新授予访问此数据库中所有内容的权限。我查看了数据库mysql 部分中的视图,看起来还不错。我可以毫无问题地运行它。我可以做一个SELECT ColA FROM ([view_sql_block_from_above]) as a,它也可以正常工作。只有在被创建为视图之后才会出现这些问题。

任何帮助将不胜感激。

=== 编辑 ===

下面是SELECT COLUMNS FROM view_test的输出

show columns from view_test;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| ColA      | int(11)          | YES  |     | NULL    |       |
| ColB      | int(10) unsigned | YES  |     | 0       |       |
| ColC      | varchar(30)      | YES  |     | NULL    |       |
| ColD      | varchar(30)      | YES  |     | NULL    |       |
| ColE      | varchar(50)      | YES  |     | NULL    |       |
| ColF      | int(10) unsigned | YES  |     | 0       |       |
| ColG      | varchar(30)      | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

【问题讨论】:

  • 尝试 SHOW COLUMNS FROM view_test 并分享结果。
  • 将显示列的输出添加到上述问题。
  • 我看不到您在哪里加入 TableA 表。首先检查 SELECT 查询。

标签: mysql sql database


【解决方案1】:

我已经解决了这个问题。结果是视图中有一个内置的 ORDER BY ColA 命令,但是如果 ColA 不是针对视图本身的查询的一部分,它将提供该错误消息。

因此,要解决此问题,我只需从视图中删除 ORDER BY 或在查询中包含 ColA 列。或者,我将 ORDER BY 从 ColA 更改为 TableA.ColA,因此排序发生在源表中,而不是派生视图中。

感谢所有帮助解决此问题的人。

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多