标签: derived-table

在SELECT语句中创建临时表,而不使用单独的CREATE TABLE

是否可以在不使用create table语句并指定每个列类型的情况下从select语句创建临时(仅会话)表?我知道派生表能够做到这一点,但那些是超临时的(仅限语句),我想重用.

如果我不必编写create table命令并保持列列表和类型列表匹配,那么可以节省时间.

mysql select temp-tables derived-table create-table

479
推荐指数
5
解决办法
65万
查看次数

创建SQL查询以检索最新记录

我正在为我的项目团队创建一个状态板模块.状态板允许用户将其状态设置为输入或输出,并且还可以提供注释.我打算将所有信息存储在一个表中......以下是数据示例:

Date               User         Status    Notes
-------------------------------------------------------
1/8/2009 12:00pm   B.Sisko      In        Out to lunch    
1/8/2009 8:00am    B.Sisko      In  
1/7/2009 5:00pm    B.Sisko      In    
1/7/2009 8:00am    B.Sisko      In    
1/7/2009 8:00am    K.Janeway    In   
1/5/2009 8:00am    K.Janeway    In    
1/1/2009 8:00am    J.Picard     Out       Vacation  
Run Code Online (Sandbox Code Playgroud)

我想查询数据并返回每个用户的最新状态,在这种情况下,我的查询将返回以下结果:

Date               User         Status    Notes
-------------------------------------------------------  
1/8/2009 12:00pm   B.Sisko      In        Out to lunch    
1/7/2009 8:00am    K.Janeway    In   
1/1/2009 8:00am    J.Picard     Out       Vacation  
Run Code Online (Sandbox Code Playgroud)

我试图找出TRANSACT-SQL来实现这一目标?任何帮助,将不胜感激.

sql t-sql derived-table

56
推荐指数
4
解决办法
14万
查看次数

选择使用UNION QUERY

我想在SQL Server中使用以下查询创建一个新表.我无法理解为什么这个查询不起作用.

Query1:工作

SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2 
Run Code Online (Sandbox Code Playgroud)

Query2:不起作用.错误:Msg 170, Level 15, State 1, Line 7 Line 7: Incorrect syntax near ')'.

SELECT * INTO [NEW_TABLE]
FROM
(
SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2
)
Run Code Online (Sandbox Code Playgroud)

谢谢!

sql t-sql sql-server union derived-table

32
推荐指数
1
解决办法
11万
查看次数

衍生帐户余额与存储帐户余额的简单银行帐户?

因此,它就像我们的正常银行账户,我们有很多交易导致资金流入或流出.总是可以通过简单地总结交易价值来得出账户余额.在这种情况下,将更新的帐户余额存储在数据库中或在需要时重新计算时会更好?

每个帐户的预期交易量:每天<5

预期的帐户余额检索:每当交易发生时,平均每天一次.

您如何建议对此做出决定?非常感谢!

database database-design derived-table

30
推荐指数
1
解决办法
7445
查看次数

如何进一步优化派生表查询,该查询的性能优于JOINed等效项?

更新:我找到了解决方案.请参阅下面的答案.

我的问题

如何优化此查询以最大限度地减少停机时间?我需要更新50多个模式,门票数量从100,000到200万不等.是否可以尝试同时在tickets_extra中设置所有字段?我觉得这里有一个解决方案,我只是没有看到.我一直在打击这个问题超过一天.

另外,我最初尝试不使用子SELECT,但表现得太多比我现在有更坏.

背景

我正在尝试优化我的数据库以获取需要运行的报告.我需要聚合的字段计算起来非常昂贵,因此我对现有模式进行了非规范化以适应此报告.请注意,通过删除几十个不相关的列,我简化了故障单表.

我的报告将按创建时管理器解析后管理器聚合票证计数.这个复杂的关系如下图所示:

EAV http://cdn.cloudfiles.mosso.com/c163801/eav.png

为了避免在运行中计算这个需要的六个令人讨厌的连接,我已经将以下表添加到我的模式中:

mysql> show create table tickets_extra\G
*************************** 1. row ***************************
       Table: tickets_extra
Create Table: CREATE TABLE `tickets_extra` (
  `ticket_id` int(11) NOT NULL,
  `manager_created` int(11) DEFAULT NULL,
  `manager_resolved` int(11) DEFAULT NULL,
  PRIMARY KEY (`ticket_id`),
  KEY `manager_created` (`manager_created`,`manager_resolved`),
  KEY `manager_resolved` (`manager_resolved`,`manager_created`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

现在的问题是,我没有将这些数据存储在任何地方.经理总是动态计算.我在几个数据库中拥有数百万张票,这些数据库具有需要填充此表的相同模式.我希望以尽可能高效的方式执行此操作,但是在优化我正在使用的查询时未能成功:

INSERT INTO tickets_extra (ticket_id, manager_created)
SELECT
  t.id, 
  su.user_id …
Run Code Online (Sandbox Code Playgroud)

mysql sql optimization derived-table query-optimization

21
推荐指数
1
解决办法
8012
查看次数

SQL - SubQuery和外表之间的关系

问题

我需要更好地理解有关何时可以在子查询中引用外部表以及何时(以及为什么)这是不合适的请求的规则.我在Oracle SQL查询中发现了一个重复,我正在尝试重构,但是当我尝试将我的引用表转换为分组子查询时,我遇到了问题.

以下声明适用:

SELECT  t1.*  
FROM    table1 t1, 
INNER JOIN table2 t2 
        on t1.id = t2.id        
        and t2.date = (SELECT max(date) 
                       FROM   table2  
                       WHERE  id = t1.id) --This subquery has access to t1
Run Code Online (Sandbox Code Playgroud)

不幸的是,table2有时会有重复的记录,所以在将它加入t1之前我需要首先聚合t2.但是,当我尝试将其包装在子查询中以完成此操作时,SQL引擎突然无法再识别外部表.

SELECT  t1.* 
FROM    table1 t1, 
INNER JOIN (SELECT * 
            FROM  table2 t2
            WHERE t1.id = t2.id              --This loses access to t1
              and t2.date = (SELECT max(date) 
                             FROM   table2 
                             WHERE  id = t1.id)) sub on t1.id = sub.id 
                             --Subquery loses access to t1
Run Code Online (Sandbox Code Playgroud)

我知道这些是根本不同的查询,我要求编译器放在一起,但我不知道为什么一个会工作而不是另一个.

我知道我可以复制子查询中的表引用,并有效地将子查询从外部表中分离,但这似乎是完成此任务的一种非常难看的方式(所有代码和处理的重复都是如此).

有用的参考资料 …

sql subquery derived-table correlated-subquery inline-view

13
推荐指数
1
解决办法
2万
查看次数

SQL左连接(多个连接条件)

我有两个名为Check Ins和Check Outs的派生表

检查Ins

CheckDate  CheckIn
---------- ---------
08/02/2011 10:10:03
08/02/2011 15:57:16
07/19/2011 13:58:52
07/19/2011 16:50:55
07/26/2011 15:11:24
06/21/2011 12:36:47
08/16/2011 14:49:36
08/09/2011 13:52:10
08/09/2011 16:54:51
08/23/2011 15:48:58
09/06/2011 15:23:00
09/13/2011 10:09:27
09/13/2011 10:40:14
09/13/2011 11:43:14
09/13/2011 11:59:32
09/13/2011 17:05:24
09/20/2011 11:03:42
09/20/2011 12:08:50
09/20/2011 15:21:06
09/20/2011 15:34:29
09/27/2011 11:34:06
10/04/2011 11:37:59
10/04/2011 15:24:04
10/04/2011 16:57:44
10/11/2011 18:19:33
Run Code Online (Sandbox Code Playgroud)

退房

CheckDate  CheckOut
---------- ---------
08/02/2011 13:29:40
08/02/2011 17:02:25
07/12/2011 17:06:06
07/19/2011 16:40:15
07/19/2011 17:07:35
07/26/2011 14:48:10
07/26/2011 17:27:08
05/31/2011 17:01:39
06/07/2011 …
Run Code Online (Sandbox Code Playgroud)

validation datetime sql-server-2005 derived-table left-join

9
推荐指数
1
解决办法
1万
查看次数

8
推荐指数
1
解决办法
4168
查看次数

如何告诉MySQL Optimizer在派生表上使用索引?

假设您有这样的查询......

SELECT T.TaskID, T.TaskName, TAU.AssignedUsers
FROM `tasks` T
    LEFT OUTER JOIN (
        SELECT TaskID, GROUP_CONCAT(U.FirstName, ' ',
            U.LastName SEPARATOR ', ') AS AssignedUsers
        FROM `tasks_assigned_users` TAU
            INNER JOIN `users` U ON (TAU.UserID=U.UserID)
        GROUP BY TaskID
    ) TAU ON (T.TaskID=TAU.TaskID)
Run Code Online (Sandbox Code Playgroud)

可以将多个人分配给给定任务.此查询的目的是为每个任务显示一行,但将人员分配给单个列中的任务

现在...假设你有正确的指标设置上tasks,userstasks_assigned_users.在连接tasks到派生表时,MySQL Optimizer仍然不会使用TaskID索引.WTF?!?!?

所以,我的问题是......如何使这个查询使用tasks_assigned_users.TaskID上的索引?临时表是蹩脚的,所以如果这是唯一的解决方案...... MySQL优化器是愚蠢的.

使用的索引:

  • 任务
    • PRIMARY - TaskID
  • 用户
    • 主要 - 用户ID
  • tasks_assigned_users
    • PRIMARY - (TaskID,UserID)
    • 附加索引UNIQUE - (UserID,TaskID)

编辑:此外,此页面表示派生表在连接发生之前执行/实现.为什么不重新使用密钥来执行连接?

编辑2: MySQL优化器不会让你在派生表上放置索引提示(大概是因为派生表上没有索引)

编辑3:这是一篇非常好的博客文章:http: …

mysql sql optimization join derived-table

6
推荐指数
1
解决办法
8126
查看次数

SQL视图与派生表

我一直认为View是一个存储查询.最近我需要在项目中使用派生表.这让我想到了观点.

是否与派生表视图相同,除了它已被保存为动态构建派生表的逻辑实体?

sql view derived-table

6
推荐指数
1
解决办法
4407
查看次数