(已经解决了。见下面的答案)
我使用以下查询创建了一个视图:
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)
答案 0 :(得分:0)
我已经解决了这个问题。结果是视图中有一个内置的ORDER BY ColA命令,但是如果ColA不是针对视图本身的查询的一部分,它将提供该错误消息。
因此,要解决此问题,我只需从视图中删除ORDER BY
或在查询中包含ColA列。或者,我将ORDER BY
从ColA更改为TableA.ColA,因此排序发生在源表而不是派生视图中。
感谢所有在此决议中提供帮助的人。