小编ype*_*eᵀᴹ的帖子

不使用循环获取特定结果

我有一个表格,其中的数据对于单个用户来说是这样的

ID - 号码 - 子号码 - 姓名

1 101 201101 Jack
2 101 201102 Jack
3 101 201103 Jack
4 101 201107 Jack
5 101 201111 Jack
6 101 201112 Jack
7 101 201113 Jack
8 101 201161 Jack
9 101 201162 Jack
10 101 201163 Jack
11 101 201164 Jack
12 101 201165 Jack

我想得到这样的记录 without using any kind of loop.

号码 - 姓名 - 子号码

101 Jack (201101-201103, 201107, 201111-201113, 201161-201165)

目前我能够以这种形式获取记录

号码 - 姓名 - 子号码 …

sql-server-2005 sql-server

5
推荐指数
1
解决办法
915
查看次数

在文件流容器之间移动内容

我有一台运行 SQL Server 2012 的服务器,在一个表上有多个 Filestream 容器。

我需要通过创建一个新的文件流容器并移动数据来将现有的文件流容器之一拆分为两部分。

如何在文件流容器之间可靠地移动内容?

我将第一个容器设置为不再增长,但是如何在不写入全新表的情况下将文件移动到另一个容器?有没有办法做一个UPDATE会导致 SQL Server 再次将文件写入磁盘的语句?- 我曾想过附加一个额外的数据字节,然后将其删除,以使 SQL Server 将内容作为新文件写入,但有更好的方法吗?

sql-server sql-server-2012 filestream

5
推荐指数
1
解决办法
1089
查看次数

具有多列的唯一索引/约束,一列可以为空

我的问题是是否有可能有由多列组成的唯一索引,其中一列可能包含NULL.

例子:命名“regulated_person” A表的数,包括列LAST_NAMEFIRST_NAMEBIRTH_DATEALIAS。的数据类型BIRTH_DATEdate,其他的则是 String/ VARCHARLAST_NAME,FIRST_NAME并且BIRTH_DATE不可为空,即它们需要值。ALIAS对于两个或更多人具有相同的名字/姓氏并且在同一天出生的情况,可作为决胜局。因为打破平局的情况并不常见,我想避免提供ALIAS值的需要,除非有必要。

作为后台,表的主键由自动增量生成器处理。唯一索引的目的是提供一个“业务键”,无需求助于主键即可识别行。我正在使用 MySQL 5.1.35 和 Hibernate ORM 版本。4.3.10.

欢迎任何有关除 MySQL 之外的服务器/数据库提供商的建议。

提前感谢您的任何指导,并提前为任何无意违反“论坛协议”的行为道歉,因为这是我第一次在任何地方提交问题。

mysql index null

5
推荐指数
1
解决办法
5688
查看次数

帮助优化删除语句

使用 SQL Server 2012 Standard - 我正在根据另一个表的内容对一个表进行删除。这花费了相当长的时间(5 小时)并且对我来说似乎不是最佳选择,希望能提供一些优化语句的输入:

delete from [dbo].[tbl1]
where exists (
    select *
    from [dbo].[tbl2] t 
    where [dbo].[tbl1].[col1] = t.[col1]
    and [dbo].[tbl1].[col2] = t.[col2]
    and [dbo].[tbl1].[col3] = t.[col3]  
)
Run Code Online (Sandbox Code Playgroud)

各列如下:

tbl1.col1 varchar(10)
tbl1.col2 datetime
tbl1.col3 varchar(60)
tbl2.col1 varchar(10)
tbl2.col2 datetime
tbl2.col3 varchar(30)
Run Code Online (Sandbox Code Playgroud)

我意识到数据类型 col3不同,我知道这很糟糕,但这是否意味着无法使用索引?

每个表上都有一个非唯一聚集索引(此查询未涵盖)和两个表上的非聚集索引,涵盖 where 子句中包含的所有三列。

tbl1包含约 12 亿行,tbl2包含约 3000 万行。我预计将从中删除大约 3000 万行tbl1

任何帮助表示赞赏!

编辑:仅供参考,tbl1并且tbl2位于不同的文件组上,但位于同一个磁盘 (SAN) 上。另外,这里是执行计划:

执行计划

sql-server delete optimization sql-server-2012

5
推荐指数
1
解决办法
137
查看次数

MySQL group by like 语句?

我需要从我们的 MySQL-DB 中获取一些统计信息,并想知道是否有更快的方法来做到这一点。

基本上,在按属性进行分隔之前,我需要有关任何给定月份的用户注册信息。

例如:

SELECT count(*) AS c  
FROM `users` 
WHERE `date_created` LIKE '2015-10%' 
  AND `country` = 'DE'
Run Code Online (Sandbox Code Playgroud)

这将返回 2015 年 10 月的数字。如何更改此语句以在一个语句中返回所有月份的结果?

我也有兴趣添加类似AND confirmed = 1单独的结果。

仅使用一个 MySQL 语句就可以做到这一点吗?

mysql group-by like

5
推荐指数
2
解决办法
3677
查看次数

多对一复制/事务复制

我在不同的地理位置(本地站点)有几个 PostgreSQL 数据库。

  • 每个本地站点 DB 都具有相同的架构,但具有唯一的数据。例如,以包含以下列的表为例:Site_ID、Department_ID、Department_Name。Site_ID 对于每个站点都是唯一的。

  • 我想将本地站点数据库中的所有数据收集到充当数据仓库的集中式数据库(再次是 PostgreSQL)中。

  • 集中式数据库上的相应示例表将具有与上述相同的列。所有本地站点数据都将进入此表。当然,每个站点数据由 Site_ID 指定。

问题:如何使用PostgreSQL 复制方法(流/多主 UDR/BDR/等)实现这一点。我看到这可以通过 SQLServer 使用Transactional Replication来完成。使用 PostgreSQL 实现此功能的最佳方法是什么?

限制:本地站点只能进行传出网络连接(即由于防火墙限制不能进行入站连接)

postgresql replication transactional-replication multi-master

5
推荐指数
1
解决办法
1418
查看次数

OFFSET ... 在第二页取重叠结果

使用时OFFSET ... FETCH,我得到了……有趣的结果。

这里有两个 sqlfiddles 来说明我的问题。

http://sqlfiddle.com/#!6/71ac1/4http://sqlfiddle.com/#!6/71ac1/8

第一个小提琴是第一页,而第二个是...第二页。

是未分页的结果。

首先,分页结果与未分页结果的顺序不同。我想我对此很酷,因为无论如何我都不会显示未分页的结果。

但是,尽管我指定的偏移量为 0,但由于某种原因,它决定将它们按输入的相反顺序放置,但它跳过了前 3 个。

在第二页上,我看到了出现在第一页上的结果。


尽管在本示例中是人为设计的,但它们都具有相同的值这一事实在我在现实生活中处理的特定查询中是现实的。这是一个表格,用户选择按 排序date

sql-server offset-fetch

5
推荐指数
1
解决办法
353
查看次数

“最小”键是什么意思?

我正在为我的数据库考试复习一些过去的论文,它问:

指定 R 的所有最小键

R(A,B,C,D,E)
A ? B
CD ? E
E ? A
B ? D
Run Code Online (Sandbox Code Playgroud)

我不确定最小键是什么意思,我试过在谷歌上搜索它,但它只提供了最小的超级键。它是否仅意味着最短的候选键:CD、CA、CE、CB?

我很困惑,因为在每个问题中他都使用了不同的名称,据我所知,最小超级键是候选键?

normalization

5
推荐指数
1
解决办法
6649
查看次数

在大表上重命名列名有多昂贵?

假设我们在 Oracle 数据库中有数百万行的表 - 重命名它有多昂贵?我的猜测(并希望)只是元数据更改,因此表的大小没有影响,但我想验证一下(找不到任何有用的结果)。

oracle

5
推荐指数
1
解决办法
878
查看次数

两个不同表的相同表别名 (Oracle)

此示例具有用于两个不同表的相同表别名。我不明白为什么 Oracle 允许这样做,如果允许,结果如何有意义。

create table Table_A (x number);
create table Table_B (x number);
insert into Table_A values (1);
insert into Table_A values (2);
insert into Table_B values (2);
insert into Table_B values (3);

select * from Table_A ;
         X
----------
         1
         2
2 rows selected.

select * from Table_B ;
         X
----------
         2
         3
2 rows selected.

select *
  from Table_A  T
  join Table_B  T
    on T.x = T.x;
         X          X
---------- ----------
         2          2
         2          2
         3          3
         3 …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g-r2 alias oracle-12c table

5
推荐指数
1
解决办法
1412
查看次数