标签: view

Postgres GROUP BY id 直接适用于表,但不适用于相同的视图

假设我有两张桌子。其中一个以一对多关系引用另一个:

CREATE TABLE t (
  id SERIAL PRIMARY KEY
, name text
);

INSERT INTO t (name) VALUES ('one'), ('two'), ('three');

CREATE TABLE y (
  id SERIAL PRIMARY KEY
, tid INTEGER REFERENCES t
, amount INTEGER
);

INSERT INTO y (tid, amount) VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 1),
(3, 1);
Run Code Online (Sandbox Code Playgroud)

我可以从这些表中查询数据,以获得与 和t上设置的特定条件匹配的行:ty

SELECT row_to_json(t.*) as "t_nogroup" FROM t
JOIN y ON t.id = y.tid
WHERE t.id = 1
AND y.amount > 1; …
Run Code Online (Sandbox Code Playgroud)

postgresql view

4
推荐指数
1
解决办法
6114
查看次数

插入到SQL SERVER中的多表视图中

我问这个问题的方式是尝试了解我遇到的类似情况,并尝试了解插入视图是如何工作的。

我有这些表:

Create table A([id] int primary key not null, value nvarchar(50) NULL)
Create table B([id] int primary key not null, value nvarchar(50) NULL)
Run Code Online (Sandbox Code Playgroud)

我从两个表创建视图,如下所示:

create View V as (select * from A) UNION ALL (select * from B)
Run Code Online (Sandbox Code Playgroud)

我在 V 视图上有这个触发器:

Create trigger v_trig on V instead of insert AS
  insert into v (id,value) select id,value from inserted
Run Code Online (Sandbox Code Playgroud)

当我尝试插入到我的视图中时,出现以下错误:

消息 4436,级别 16,状态 12,过程 v_trig,第 2 行

UNION ALL 视图“db.dbo.V”不可更新,因为未找到分区列

我有一个具有类似视图(带有union all)的数据库,出于某种原因,我可以毫无问题地插入它,我试图理解为什么。

我应该怎么做才能允许插入到诸如视图之类的视图中?有没有办法以插入的方式决定(不更改触发器)哪个是视图的默认表?

sql-server view

4
推荐指数
1
解决办法
5292
查看次数

如何从视图中解密列名?

我必须处理第三方数据库,我试图获取视图中使用的所有列,但我对它们进行了加密,
例如:而不是获取intNUMERO_SALARIE知道TNumSal为什么?

DECLARE @TableViewName NVARCHAR(128)
SET @TableViewName=N'DP_SALARIE'
SELECT b.name AS ColumnName, c.name AS DataType, b.max_length AS Length
FROM sys.all_objects a
INNER JOIN sys.all_columns b
ON a.object_id=b.object_id
INNER JOIN sys.types c
ON b.user_type_id=c.user_type_id
WHERE a.Name=@TableViewName
AND a.type IN ('U','V')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有什么办法可以解密它们吗?

sql-server datatypes view system-tables

4
推荐指数
1
解决办法
293
查看次数

观点在逻辑上是多余的吗?

今天早些时候,我意识到我犯了一个非常愚蠢的错误。我没有编写视图,而是编写了无参数内联表值函数。这让我思考:除了界面之外,两者之间有什么区别吗?据我所知,它们在逻辑上是相同的并且执行相同。

那么,换句话来说,视图提供了哪些无参数内联表值函数所没有的功能呢?我想到的只是索引视图,但我从未见过有人真正使用它们。

sql-server feature-comparison t-sql view functions

4
推荐指数
2
解决办法
2689
查看次数

从应用代码访问 all_mview 或 user_mviews

我需要访问 user_mviews 或 all_mviews 表以获取有关我的应用程序中物化视图的元信息。读取 user_mviews 表需要哪些授权?

oracle view

3
推荐指数
1
解决办法
2193
查看次数

视图消耗的表空间

我在一堂 SQL 课上,讲师说“DBA 不喜欢用户创建视图,因为他们会破坏表空间”。

显然,我知道任何模式对象都会消耗一些表空间,但是说视图会占用表空间并不是夸大其词,因为您需要存储的只是一个查询(以及权限和一些其他元数据),并且因此,它们不会比普通表中的普通行占用更多的空间?

oracle view tablespaces

3
推荐指数
1
解决办法
796
查看次数

复杂视图的连接条件

如果我加入两个/更多复杂的视图(通过加入两个/更多表组成的视图);它会导致对基表的多次读取迭代吗?

仅在基表本身上设置连接条件不是更有效吗?

这是我在我们的生产 Oracle 10g R2(ASM 磁盘组)环境中分析过的一个问题,sql 查询是由应用程序本身动态生成的,而不是使用表来提取结果,而是使用复合视图。
此外,条件连接经常在这些复合视图上实现。

复杂视图上的这种连接是否会不必要地导致高 CPU 利用率并占用宝贵的缓冲区缓存?

oracle view

3
推荐指数
1
解决办法
918
查看次数

是否可以创建一个名为 C 的数据库,它是数据库 A + B 中所有表的视图?

使用 SQL 2005 或 2008,是否可以创建一个名为 C 的数据库,它是数据库 A + B 中所有表的视图?数据库 A、B 和 C 位于同一本地服务器上。

我希望能够在 2 个不同数据库中的表之间创建连接查询。有没有另一种方法可以做到这一点?

sql-server view

3
推荐指数
1
解决办法
135
查看次数

PostgreSQL 9.1 - 查询视图需要很多时间

使用 PostgreSQL 9.1,我们在 PostgreSQL 的 VIEW 上执行查询时遇到问题。以下是情况:

我们有一个分区表“buz_scdr”,我们在它上面构建了一个视图“Swiss_client_wise_minutes_and_profit”。此 VIEW 的目的是连接来自不同表(包括“buz_scdr”表)的数据以进行高效查询。这个策略一直运行良好,直到表“buz_scdr”变得巨大(所有分区中的整体记录变得巨大。该表基于日期进行分区)。

在此 VIEW 上执行的查询开始需要很长时间(大约 5 到 10 分钟)。为了弄清楚为什么这个查询需要这么长时间才能执行,我们使用 EXPLAIN 命令来显示它的执行计划。我们使用的查询如下:

EXPLAIN SELECT * from  "Swiss_client_wise_minutes_and_profit" where start_time = '2012-7-22 08:00';
Run Code Online (Sandbox Code Playgroud)

其结果在explain.depesz.com 上或如下:

   Subquery Scan on "Swiss_client_wise_minutes_and_profit"  (cost=2127919.71..94874537.55 rows=40474 width=677)
   Filter: ("Swiss_client_wise_minutes_and_profit".start_time = '2012-07-22 08:00:00+00'::timestamp with time zone)
   ->  WindowAgg  (cost=2127919.71..94773352.06 rows=8094839 width=148)
         ->  Sort  (cost=2127919.71..2148156.81 rows=8094839 width=148)
               Sort Key: cc.name, rdga.group_id
               ->  Hash Left Join  (cost=1661.50..604234.77 rows=8094839 width=148)
                     Hash Cond: (((cc.company_id)::text = (rdga.company_id)::text) AND ((cs.c_prefix_id)::text = (rdga.dest_id)::text))
                     ->  Hash …
Run Code Online (Sandbox Code Playgroud)

postgresql performance view partitioning subquery query-performance

3
推荐指数
1
解决办法
6823
查看次数

视图会影响 ALTER TABLE 命令吗?

我为许多客户提供了一个数据库系统。该数据库本地安装在 Oracle 上。

随着产品的增长,我们会定期升级数据库结构(添加新字段、重命名旧字段、更改内容)。

我的一位客户希望将他们自己的自定义视图添加到数据库中。他们向我保证,他们会将视图添加到实时模式的不同模式中。但是,我担心包含视图可能会影响未来的升级脚本。

如果视图引用了要更改的表,视图的存在是否会阻止表被更改?

oracle view alter-table upgrade

3
推荐指数
1
解决办法
3375
查看次数