我面临的基本问题是我需要每个项目的最新记录。
一些设置... MySQL 5.6.14。
我需要创建两个视图(因为 MySQL 不允许我在视图中有子查询)。我的第一个查询设置了这样的数据。
select
`inventoryrecords`.`inventoryrecordid` AS `inventoryrecordid`,
`inventoryrecords`.`logicaldeviceid` AS `logicaldeviceid`,
`inventoryrecords`.`passrfid` AS `passrfid`,
`inventoryrecords`.`tagepc` AS `tagepc`,
`inventoryrecords`.`currentstate` AS `currentstate`,
`inventoryrecords`.`statedateutc` AS `statedateutc`,
`inventoryrecords`.`ownerobjectid` AS `ownerobjectid`,
`inventoryrecords`.`ownerobjecttype` AS `ownerobjecttype`
from
`inventoryrecords`
where
1
order by `inventoryrecords`.`statedateutc` desc
Run Code Online (Sandbox Code Playgroud)
然后我可以使用我的“真实”查询将所有内容限制为每个 TagEPC 的最后一条记录。
select
`lastinventoryrecords_step1`.`inventoryrecordid` AS `inventoryrecordid`,
`lastinventoryrecords_step1`.`logicaldeviceid` AS `logicaldeviceid`,
`lastinventoryrecords_step1`.`passrfid` AS `passrfid`,
`lastinventoryrecords_step1`.`tagepc` AS `tagepc`,
`lastinventoryrecords_step1`.`currentstate` AS `currentstate`,
`lastinventoryrecords_step1`.`statedateutc` AS `statedateutc`,
`lastinventoryrecords_step1`.`ownerobjectid` AS `ownerobjectid`,
`lastinventoryrecords_step1`.`ownerobjecttype` AS `ownerobjecttype`
from
`lastinventoryrecords_step1`
group by `lastinventoryrecords_step1`.`tagepc`
order by `lastinventoryrecords_step1`.`statedateutc` desc
Run Code Online (Sandbox Code Playgroud)
当我尝试从“真实”视图中选择 * 时,我没有得到我期望的数据。但是,当我在窗口中使用子查询运行查询时。 …
我有一个从显示不同数据的表中选择数据的视图。
表是dbo.user,视图是dbo.users(不要判断,我继承了这个系统)。观点很简单select * from table。
如果我运行以下语句:
SELECT Field1, Field2 FROM dbo.[User] WITH (NOLOCK) ORDER BY Field1;
SELECT Field1, Field2 FROM dbo.Users WITH (NOLOCK) ORDER BY Field1;
Run Code Online (Sandbox Code Playgroud)
我为其中一个字段获得了不同的值。见附图:

任何想法这是如何发生的?该表是聚集的,具有 pk 和唯一索引。
我可以从 JSON 数据类型创建 VIEW 但将其作为关系结构吗?
例子:
SELECT *
FROM json_test;
Run Code Online (Sandbox Code Playgroud)
结果
[
{
"name": "Roy",
"Country": "USA",
"hobby": "Swim",
"address": "Church Street",
"sex": "M"
},
{
"name": "Roy",
"Country": "USA",
"hobby": "Cricket",
"address": "Amsterdam",
"sex": "F"
},
{
"name": "Anam",
"country": "Greece",
"hobby": "Polo",
"address": "MG Road",
"sex": "M"
}
]
Run Code Online (Sandbox Code Playgroud)
然后创建 VIEW 将类似于(不确定是否/如何执行此操作)
CREATE VIEW normalized AS
SELECT name, country, hobby, address, sex
FROM JSON data
Run Code Online (Sandbox Code Playgroud)
然后我可以用这样的东西查询视图
SELECT *
FROM normalized
Run Code Online (Sandbox Code Playgroud)
结果集
name | country | hobby | address …Run Code Online (Sandbox Code Playgroud) 我们有从我们的车间接收数据的表 A,我们目前拥有它,以便数据在 5 年后从表 A 移动到表 B。我想简化它,但需要帮助创建视图。我可以更改存储过程以在一个月后移动数据,但需要能够指向包含表 A 和 B 组合数据的视图。我尝试了以下操作,但出现以下错误:“列名‘PARTNOAUX’在视图或函数 'Table_Full_' 中指定了不止一次。”
CREATE VIEW Table_Full AS
SELECT *
FROM [A].[dbo].[AUX] AS S
Inner Join [B].[dbo].[AUX]AS T
ON S.DATETIMEAUX=T.DATETIMEAUX;
Run Code Online (Sandbox Code Playgroud) 我在视图中有一个非常大的查询(让我们称之为a_sql),这真的很快,除非我ORDER BY在SELECT带有小的外部使用LIMIT:
SELECT
customs.id AS custom_id, customs.custom_name AS custom_name, customs.slug AS slug, customs.use_case AS custom_use_case,
SUM(CASE WHEN designers.id = orders.user_id AND orders.bulk = 't' THEN order_rows.quantity ELSE 0 END) AS sale_bulk,
SUM(CASE WHEN designers.id = orders.user_id AND orders.bulk = 'f' THEN order_rows.quantity ELSE 0 END) AS sale_not_bulk,
SUM(CASE WHEN designers.id = orders.user_id THEN order_rows.quantity ELSE 0 END) AS sale_total,
SUM(CASE WHEN designers.id <> orders.user_id AND orders.bulk = 't' THEN order_rows.quantity ELSE 0 …Run Code Online (Sandbox Code Playgroud) postgresql performance optimization view postgresql-9.4 postgresql-performance
我的老板正在请求一个大于 1024 列的视图,其中他在查询视图时只会选择他想要的几列,以便实际返回的列小于 1024。为什么我可以查询大于 1024 的列,但是我无法将这个完全相同的查询保存为视图?
我正在使用 SQL Server 2012 企业版
我特别在谈论 SQL Server。我想一个用户尝试过它并得到一个错误(您没有对查询中未明确提及的隐藏底层视图 B 的选择权限)。主视图 A 将一个表和另一个视图(视图 B)连接在一起,并且它们没有视图 B 的权限。
我不负责数据库的权限,但我很好奇它是如何工作的。
您是否需要为视图下构建的每个对象授予权限?还是只是视图本身?或者两者之一?
我认为视图的目的之一是您不想为其授予完全权限的底层对象的快照。这对我来说是不寻常的。
我有 2 个表,A 和 B,带有一个int主键和一个string名称。
我有一个第三个表 C,其中有 2 列将 A 和 B 的 ID 映射在一起。我想创建一个视图来编辑表 C 中的映射,但我希望视图显示Name值而不是IDs. 该视图将通过 SQL Server Management Studio 进行编辑。
例如,视图应该允许用户在项目列中输入“Item4”,在附件列中输入“Accessory1”,表 C 更新为新的行映射“4”到“1”。
我想知道是否可以将其设为可编辑视图,这样我就不必费心编写整个应用程序来管理它。
如果我转到 Microsoft SQL Server Management Studio 中的视图并右键单击,我可以编辑前 200 行。我知道此功能的限制是我只能在更改为单个表时进行编辑。我只会编辑一个表,所以可能有办法让它工作。有办法吗?(我的用户是熟悉 SQL Server 并且更喜欢直接访问他们的数据的人(交易员))。
Windows Server 2012、Microsoft SQL Server。
我有一个存储过程(见下文),它创建了一个我需要查询的视图。存储过程部分运行良好,大约需要 5 秒钟才能完成,然后创建了视图。
该视图有大约 30-35k 行。
我的问题是对创建的视图运行一个简单的查询需要大约 20 分钟!一个简单的查询,例如:
SELECT COUNT(*) FROM MY_VIEW
Run Code Online (Sandbox Code Playgroud)
上面的查询大约需要 20 分钟才能完成,直到它返回行数。对实际表(视图包含)运行相同的查询立即返回结果!
我不确定存储过程是否相关,因为视图是立即创建的并且查询它们是我遇到的问题,但我发布它以防万一。
我想提一下,由相同存储过程创建的其他视图,包含少量行(数百行)对查询的响应速度相当快......所以行数肯定是这里的一个因素。
我不明白的是为什么查询一个 30k 行的表会在 2 秒内返回结果,而对 30k 行视图执行相同的查询需要 20 分钟。
USE [QUARTERLY_SEC_REPORT]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DynamicView_QR_VisitsDistSummary]
AS
BEGIN
DECLARE @CurrentView nvarchar(MAX) = null
DECLARE @SchemaName nvarchar(400)
DECLARE @TableName nvarchar(400)
DECLARE @DynSQL nvarchar(MAX)
DECLARE @DateModifier nvarchar(400)
DECLARE @DynDROP nvarchar(MAX) = 'DROP VIEW Unified_QR_VisitsDistSummary'
DECLARE @InclusionTable nvarchar(MAX) = '[dbo].[QUARTERLY_VIEW]'
Set @DynSQL …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试从执行以下操作的表创建视图:
Table A
???????????????????????????????
? PART NUMBER ? FILE NAME ?
???????????????????????????????
? PN0001-01 ? FOO ?
? PN0002-01 ? BAR ?
? PN0003-01 ? FOO,BAR ?
? PN0004-01 ? BAR,FOO,FOB ?
???????????????????????????????
Run Code Online (Sandbox Code Playgroud)
创造
View B
???????????????????????????????
? PART NUMBER ? FILE NAME ?
???????????????????????????????
? PN0001-01 ? FOO ?
? PN0002-01 ? BAR ?
? PN0003-01 ? FOO ?
? PN0003-01 ? BAR ?
? PN0004-01 ? BAR ?
? PN0004-01 ? FOO ?
? PN0004-01 ? FOB ? …Run Code Online (Sandbox Code Playgroud) view ×10
sql-server ×7
t-sql ×3
performance ×2
postgresql ×2
group-by ×1
json ×1
mysql ×1
nosql ×1
optimization ×1
permissions ×1
ssms ×1
table ×1