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

如何使用子查询进行 SQL 删除

我们的一位开发人员添加了以下代码以从表中删除重复记录:

DELETE  SubQuery

FROM
(
    SELECT  ID
            ,FK1
            ,FK2
            ,CreatedDateTime
            ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber

    FROM    Table
)
AS SubQuery

WHERE   RowNumber > 1
Run Code Online (Sandbox Code Playgroud)

在查看代码时,我认为它不起作用,但是在我们的测试环境 (SQL 2014) 中测试它表明它起作用了!

SQL 如何知道解析子查询并从中删除记录table

sql-server subquery sql-server-2014

15
推荐指数
1
解决办法
3577
查看次数

在没有表扫描的情况下向大表添加 NOT NULL 约束

尝试向NOT NULL具有 10 亿行的表添加约束。我无法承受超过几秒钟的表锁。有没有办法在alter table 语句期间防止全表扫描?我在列上创建了一个索引,希望它能被使用,但这似乎不起作用。可能是检查约束?其他选择?谢谢!

postgresql alter-table postgresql-9.3

14
推荐指数
2
解决办法
5613
查看次数

如何多次加入同一个表?

我有两个表,“hierarchy_table”和“name_table”。

层次结构表包含一个具有多个父级和子级的对象。每个父级和子级都由 id 引用。

|  object_id  |  parent_id_1  |  parent_id_2  |  child_id_1  |  child_id_2  |
-----------------------------------------------------------------------------
|     1234    |      9999     |      9567     |     5555     |     5556     |
-----------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

hierarchy_table 中的每个对象 id 在 name_table 中都有一个条目:

|  name_id  |    name    |
--------------------------
|   1234    |   ABCD     |
--------------------------
|   9999    |   ZYXW     |
--------------------------
| ...
Run Code Online (Sandbox Code Playgroud)

如何将hierarchy_table 中的每个id 多次加入name_table,以便我可以得到填充每个名称的结果?

像这样:

|   object    |   parent_1    |   parent_2    |   child_1    |   child_2    |
-----------------------------------------------------------------------------
|     ABCD    |      ZYXW     |      BBBB     |     CCCC     |     DDDD …
Run Code Online (Sandbox Code Playgroud)

postgresql join

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

压缩 PostgreSQL 数据库

我有一个超过 500GB 的大型 PostgreSQL 数据库,它太大了。有没有办法将数据库压缩到更易于管理的大小?我曾尝试使用 SquashFS 执行此操作,并且将数据库压缩到 177GB,但是 PostgreSQL 要求数据库具有写入权限并且 Squashed 系统是只读的。更有经验的数据库用户对实现这个目标有什么建议吗?

该数据库保存地球的 GIS 数据,并将在已部署的系统上本地使用。目前它位于 1TB SSD 上,但是,我试图避免仅仅为了容纳大型数据库而插入额外的硬盘驱动器。数据库按预期执行,没有问题,我只是想将其压缩到更易于管理的大小,并避免将其放在单独的驱动器上。

postgresql compression

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

如何将分钟添加到时间数据类型?

我有一个将两条记录插入到表中的存储过程,记录之间的区别在于第二条记录的时间列在第一条@MinToAdd之后:

CREATE PROCEDURE CreateEntry
    /*Other columns*/
    @StartTime time(2),
    @EndTime time(2),
    @MinutesToAdd smallint
    AS
BEGIN
    SET NOCOUNT ON;

    SET @MinutesToAdd = @MinutesToAdd % 1440;   --Prevent overflow if needed?
    IF (@MinutesToAdd > 0)
    BEGIN
    INSERT INTO ClientNotification (/*Other columns*/ startTime, endTime)
        OUTPUT inserted.id
        VALUES
               (/*Other columns*/ @StartTime, @EndTime),
               (/*Other columns*/ @StartTime + @MinutesToAdd, @EndTime + @MinutesToAdd);
    END
    ELSE
    BEGIN
        /*Whatever ELSE does.*/
    END
END
Run Code Online (Sandbox Code Playgroud)

@MinutesToAdd分钟添加到@StartTime和的正确方法是什么@EndTime
请注意我使用的是time数据类型。

更新
正确答案应包含以下信息:

  • 如何将分钟添加到 time数据类型。 …

sql-server-2008 sql-server

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

如何在 Windows 上对 PostgreSQL 进行小升级,例如从 9.3.0 升级到 9.3.1?

使用 Enterprise DB 构建的 Windows 安装程序从 PostgreSQL(例如 9.3.0 到 9.3.1)执行小升级的推荐方法是什么?我应该先卸载还是在现有安装上安装?

当前安装是使用 postgresql-9.3.0-1-windows-x64.exe 执行的。现在我想使用 postgresql-9.3.1-1-windows-x64.exe 进行升级。

postgresql installation upgrade postgresql-9.3

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

重命名表需要多长时间

重命名大小为 219 GB 的表需要多长时间?

这是我们服务器的规格:

  • 内存:65 GB
  • 可用磁盘空间:266 GB

MySQL Ver 14.12 分发版 5.0.77

对困惑感到抱歉。我们的计划是重命名一个大小为 219 GB 的 MySQL 表。需要花多长时间?我们需要为这次迁移准备大磁盘空间吗?

表的引擎:InnoDB.

mysql alter-table

12
推荐指数
2
解决办法
3万
查看次数

SELECT 和 GROUP BY 子句中的 SQL 计算字段

通常在查询我的 MS SQL Server 数据库时,我需要创建一个计算字段,例如

(CASE WHEN A.type = 'Workover' THEN 'Workover' 
      ELSE (CASE WHEN substring(C.category, 2, 1) = 'D' THEN 'Drilling' 
                 WHEN substring(C.category, 2, 1) = 'C' THEN 'Completion' 
                 WHEN substring(C.category, 2, 1) = 'W' THEN 'Workover' 
                 ELSE 'Other' 
            END)
END)
Run Code Online (Sandbox Code Playgroud)

然后我需要通过这个计算字段(等等)对我的结果进行分组。因此,我在 SELECT 和 GROUP BY 子句中进行了相同的计算。SQL 服务器实际上执行了两次这些计算,还是它足够聪明,只执行一次?

sql-server

12
推荐指数
2
解决办法
3万
查看次数

INSERT INTO 新创建的目标表后 ROLLBACK 不起作用

我正在研究将 CSV 文件 ( customers.csv) 导入 MySQL 表 ( customers) 的PHP 脚本。

在将 CSV 文件的内容插入 mysql 表之前,我首先备份原始customers表。

我将整个导入过程(包括备份)包装在一个 mysql 事务中(以解决 CSV 在中间某处损坏的情况,并确保导入是原子的)。

问题是当我在INSERT INTO语句之后立即调用它时 ROLLBACK 似乎不起作用:通过 phpMyAdmin 检查数据库时,我可以看到新创建的表和 ROWS INSIDE IT 在 rollback 后仍然存在

以下是操作日志:

[2015-01-19 14:08:11] DEBUG: "START TRANSACTION" [] []
[2015-01-19 14:08:11] DEBUG: SHOW TABLES LIKE :table_name; [] []
[2015-01-19 14:08:28] DEBUG: CREATE TABLE `customers__20150119_14_08_20` LIKE `customers` [] []
[2015-01-19 14:08:37] DEBUG: INSERT INTO `customers__20150119_14_08_20` SELECT * FROM `customers` [] …
Run Code Online (Sandbox Code Playgroud)

mysql innodb transaction rollback

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

如何合并具有不同有效期的相似记录?

我正在处理的表包含三个组成部分:

  1. ID列(另一个表中的主键)
  2. 一些数据列
  3. 日期有效from/to列。

价值观:

ID   Data From        To  
1    a    2015-01-01  2015-01-05
1    a    2015-01-06  2015-01-10
1    b    2015-01-11  2015-01-15
1    a    2015-01-16  2015-01-20
2    c    2015-01-01  2015-01-05
2    c    2015-01-06  2015-01-10
Run Code Online (Sandbox Code Playgroud)

该表通过以某些时间间隔拍摄另一个数据源的“快照”并将有效日期分配给记录来更新。问题是这些快照会为在该时间间隔内根本没有更改的记录(具有不同的有效日期)创建重复条目。

我想通过查找具有连续日期的行并合并它们并为它们分配一个有效期来减小表的大小。例如:

ID   Data From        To  
1    a    2015-01-01  2015-01-10
1    b    2015-01-11  2015-01-15
1    a    2015-01-16  2015-01-20
2    c    2015-01-01  2015-01-10
Run Code Online (Sandbox Code Playgroud)

我目前的逻辑是:

  1. 按 ID、数据字段和“有效自”字段选择和排序所有行(因此它们在连续行的组中)。
  2. 使用游标比较相邻行的相似性。
  3. 如果它们相同,则合并行并更改有效期以包括两行。

我知道游标效率很低(我有一个很大的数据集),所以我正在寻找其他方法。

sql-server sql-server-2008-r2 gaps-and-islands

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