视图是否可能具有与其基础表相同的主键?

时间:2019-03-27 17:18:46

标签: postgresql

假设我有下表:

CREATE TABLE item (id int PRIMARY KEY, name text, price numeric);

我能够运行诸如

的查询
SELECT COUNT(*), id, name, price FROM item GROUP BY id;

我假设因为id是表的主键,即使name子句中没有priceGROUP BY

现在假设我这样在item表上创建一个视图:

CREATE VIEW item_view AS SELECT * from item;

如果我尝试针对此视图运行相同的查询,那么它将无法正常工作:

SELECT COUNT(*), id, name, price FROM item_view GROUP BY id;
  

错误:列“ item_view.name”必须出现在GROUP BY子句中或在聚合函数中使用

我认为这是因为item_view视图不遵守其基础item表的主键约束。

我想我在这里有两个问题:

  1. 有没有办法使视图上的最后一个查询有效,使其等同于第一个查询?
  2. 按主键分组然后选择我想要的任何字段是不好的做法吗?

0 个答案:

没有答案