我有两个表:
工作:
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)
有任何想法吗?
我想在 postgresql 中为一个表创建一个触发器。我的表包含有关事件的数据,包括房间号、开始时间和事件持续时间。在新插入表时,我想检查新事件的房间号在新事件发生时是否会很忙。如果是这样,那么我想引发异常,否则将新事件插入表中。我想将触发器声明为instead of触发器,insert但 postgres 不允许在表instead of上insert操作触发器(我不想只为触发器创建视图)。
我该如何解决这个问题?理论上我可以创建一个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) 版本
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) 我有一个 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_name和feature_value的可能值。每次应用程序发展时我都不必更改数据库,我需要一种新的功能。 …
对于我们的一个数据库,如下所示的查询非常慢。
由于安全原因,我无法分享实际的查询或计划,但只是想知道如何编写查询如下
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 数据库,它真的很慢。
CreationDate和LastAccessdate列都是日期时间 (10)
和 DisplayName是VARCHAR(50)
如果以上可以重写,请建议我如何提高性能
sql-server sql-server-2012 query-performance performance-tuning
我有一个预订系统的设计数据库。预订系统要求如下:
我在设计表格时面临的问题是有 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 结果中获取详细信息,但是在运行 SQL 5 分钟后,它不再在v$sql和下V$sqlarea。Oracle 在这些视图中保留查询的标准是什么?
除了性能和安全性之外,MySQL 和 Postgres 之间真的有什么区别吗,比如 SQL 查询、内置函数、过程等等?
我问这个是因为我熟悉 PHP 和 MySQL (phpMyAdmin) 但不熟悉 Postgres (phpPgAdmin)
postgresql ×3
oracle ×2
functions ×1
insert ×1
mysql ×1
oracle-10g ×1
oracle-sqlcl ×1
php ×1
phpmyadmin ×1
select ×1
sql-server ×1
trigger ×1