sql

常用sql

Posted by BY annie dong on January 9, 2016

常用sql汇总


查询重复数据

SELECT * FROM projects
WHERE name IN (SELECT  name  FROM  projects  GROUP  BY  name  HAVING  count(name) > 1)
--效率更高
SELECT *
    FROM projects AS a
    WHERE (name IN (SELECT name FROM 
projects AS B WHERE a.id <> b.id))

批量数据处理 psql

use cattery

GO

CREATE TABLE RollbackDB.dbo.cattery_rollback
(
  MasterId BIGINT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  id int NOT NULL,
  title nvarchar(255),
  subtitle nvarchar(255)
)

GO

INSERT INTO RollbackDB.dbo.cattery_rollback WITH(TABLOCK)
SELECT
  c.id,
  c.title,
  c.subtitle
FROM dbo.projects c WITH(NOLOCK)
WHERE c.subtitle<>'' AND c.subtitle is not null;

GO

PRINT 'Patching legacy data to exchange project's title&subtitle in batch'

DECLARE @ImpactRows BIGINT=1,@batch_size INT=5000,@CurrentRow BIGINT=1
WHILE @ImpactRows>0
BEGIN
  UPDATE c
  SET c.title = list.subtitle,
      c.subtitle = list.title
  FROM dbo.projects c
  INNER JOIN RollbackDB.dbo.cattery_rollback list ON c.id = list.id
  WHERE list.MasterId>=@CurrentRow AND list.MasterId<@CurrentRow+@batch_size

  SET @ImpactRows=@@rowcount
  SET @CurrentRow=@CurrentRow+@batch_size
END

PRINT 'Patched legacy data to exchange project's title&subtitle in batch'
GO