小编a_h*_*ame的帖子

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

选择超过 2 个选择查询

我有两个表:
工作:

id  w_date        other stuff
1   2017-05-10
1   2017-05-08
3   2017-05-17
Run Code Online (Sandbox Code Playgroud)

家:

id  h_date       other stuff
1   2017-05-01
4   2017-05-06
1   2017-05-14
Run Code Online (Sandbox Code Playgroud)

现在我需要一个查询来获取 id 为 1 的所有日期。

就像是:

Select * 
from (
    select w_date as date 
    from work where id=1
), 
  (select h_date as date from home where id=1)
Run Code Online (Sandbox Code Playgroud)


结果应该是:

id  date
1   2017-05-01
1   2017-05-08
1   2017-05-10
1   2017-05-14
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

select

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

如何在postgres的表上创建`而不是`触发器?

我想在 postgresql 中为一个表创建一个触发器。我的表包含有关事件的数据,包括房间号、开始时间和事件持续时间。在新插入表时,我想检查新事件的房间号在新事件发生时是否会很忙。如果是这样,那么我想引发异常,否则将新事件插入表中。我想将触发器声明为instead of触发器,insert但 postgres 不允许在表instead ofinsert操作触发器(我不想只为触发器创建视图)。

我该如何解决这个问题?理论上我可以创建一个after触发器,然后检查新插入的数据是否有效,如果无效则删除。但这在概念上似乎是错误的方法,实际上也可能是错误的(我不确定触发器是否是原子的,也许有人可能已经根据错误的数据做出了错误的决定)。

这是表定义:

create table room_schedule(
  start_date date,
  start_time time,
  room_no int,
  event_id int,
  duration interval,
  primary key(start_date, start_time, room_no, event_id)
);
Run Code Online (Sandbox Code Playgroud)

这是我的触发器和函数定义:

create or replace function inserttrigfunc() returns trigger as $$
declare count int;

begin

with end_time_table(eid, stime, etime) as (
        select event_id, start_time, (start_time + duration) as etime from room_schedule
        where room_no=new.room_no
    ),
        overlapping_time_table(eid, stime, etime) as(
            select * from end_time_table
            where …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger insert functions

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

SQLcl 历史记录(向上箭头)重写了我的查询

版本

sql -version
SQLcl: Release 18.4.0.0 Production
Run Code Online (Sandbox Code Playgroud)

我输入:

SQL>  exec dbaspace.long_ops;

SID  % Done  Start Time          Rem [s] Elapsed Message
==== ======= =================== ======= ======= ======================================================================================

There are currently no long running operations.


PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)

我按 ARROW UP 键来获取最后一个命令,SQLcl 像这样修改我的历史记录:

SQL> BEGIN dbaspace.long_ops; END;;

Error starting at line : 1 in command -
BEGIN dbss.long_ops; END;;
Error report -
ORA-06550: line 1, column 26:
PLS-00103: Encountered the symbol ";"
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-sqlcl

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

在同一个表上使用多个 JOIN 查询的替代方法?

我有一个 Postgresql 11 数据库。假设我有一张桌子,叫做houses。它应该有数十万条记录。

CREATE TABLE houses (
  pkid serial primary key,
  address varchar(255) NOT NULL,
  rent float NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

现在,我的房子有我想在数据库中注册的功能。由于可能的功能列表会很长(几十个)并且会随着时间的推移而演变,因为我不想在表屋中添加一长串列并使用“ALTER TABLE”不断更改表,我想到了这些功能有一个单独的表格:

CREATE TABLE house_features (
   pkid serial primary key,
   house_pkid integer NOT NULL,
   feature_name varchar(255) NOT NULL,
   feature_value varchar(255)
);
CREATE INDEX ON house_features (feature_name, feature_value);
ALTER TABLE house_features ADD CONSTRAINT features_fk FOREIGN KEY (house_pkid) REFERENCES houses (pkid) ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

平均而言,每个房屋记录在house_features表中将有 10-20 条记录。

到目前为止,这似乎是一个简单高效的模型:我可以添加尽可能多的不同功能,控制上层(应用层和/或 GUI)中feature_namefeature_value的可能值。每次应用程序发展时我都不必更改数据库,我需要一种新的功能。 …

postgresql relational-division query-performance

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

需要帮助来了解调优慢速 SQL 服务器查询

对于我们的一个数据库,如下所示的查询非常慢。

由于安全原因,我无法分享实际的查询或计划,但只是想知道如何编写查询如下

SELECT [Id]
      ,[AboutMe]
      ,[Age]
      ,[CreationDate]
      ,[DisplayName]
      ,[DownVotes]
      ,[EmailHash]
      ,[LastAccessDate]
      ,[Location]
      ,[Reputation]
      ,[UpVotes]
      ,[Views]
      ,[WebsiteUrl]
      ,[AccountId]
  FROM [StackOverflow2010].[dbo].[Users]
  WHERE DisplayName IN (

 SELECT DisplayName from dbo.Users
 WHERE CAST(LastAccessDate AS DATE) = CAST ('20160814' AS DATE)
 AND CreationDate>= DATEADD (DAY, -30,LastAccessDate)
 AND CreationDate<= LastAccessDate)
Run Code Online (Sandbox Code Playgroud)

在 stackoverflow 数据库中,这不会返回任何行,但对于我们现有的 6 TBS 数据库,它真的很慢。

CreationDateLastAccessdate列都是日期时间 (10)

DisplayName是VARCHAR(50)

如果以上可以重写,请建议我如何提高性能

sql-server sql-server-2012 query-performance performance-tuning

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

您将如何为预订系统设计一张桌子?

我有一个预订系统的设计数据库。预订系统要求如下:

  1. 预订系统允许用户预订周一至周五上午 8 点至下午 1 点之间的时间段(1 小时)。
  2. 用户可以为该 1 小时时段预订场地。
  3. 预订系统每年开放13周,然后休息13周,再开放13周,休息13周。

我在设计表格时面临的问题是有 3 个重要的控制变量 - 时间段、场地和 13 周。

我通过有一个包含固定行数的表格来起草设计。(因此,对于上午 8 点到下午 1 点,将有 5 个插槽,因此每周将有 25 个插槽。假设有 3 个场地,那么我将有 25 个插槽 x 3 个场地,这给了我 75 行。然后我乘以 75 至 26 周,因为系统将打开两个 13 周。因此,这将给我 1950 个固定行。

但是,问题是如果我通过在晚上 10 点结束来增加小时数,那么我每天将有 14 个时段,这意味着每周将有 70 个时段。如果场地增加到 10 个场地,那么,我将有 70 个插槽 x 10 个场地,这给我 700 排。当然,乘以 26 周,我将需要一个包含 18,200 个固定行的表。由于行太多,设计将难以管理。

该表将类似于以下内容:

+------------------------------------------------- ---------------------+
| 身份证 | 周 | 时间 | 地点 | 用户 | 状态 | …

sql-server-2008 database-design

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

sql 留在 V$SQLAREA 的标准是什么?

我需要从 SQL 结果中获取详细信息,但是在运行 SQL 5 分钟后,它不再在v$sql和下V$sqlarea。Oracle 在这些视图中保留查询的标准是什么?

oracle-10g

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

MySQL 和 PostgreSQL 在编写 SQL 查询方面有什么区别?

除了性能和安全性之外,MySQL 和 Postgres 之间真的有什么区别吗,比如 SQL 查询、内置函数、过程等等?

我问这个是因为我熟悉 PHP 和 MySQL (phpMyAdmin) 但不熟悉 Postgres (phpPgAdmin)

mysql postgresql phpmyadmin php

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

有人可以帮助我理解视图、物化视图和快照之间的区别吗?

有人可以帮助我理解视图、物化视图和快照之间的区别吗?

oracle

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