标签: sql-delete

MYSQL删除所有具有count(*)= 1的结果

我有一个表有两个字段sesskey(varchar32,index)和产品(int11)的表,现在我必须删除所有具有group by sesskey count(*)= 1的行.我正在尝试一些方法,但都失败了.

例:

delete from taged where sesskey in (select sesskey from taged group by sesskey having count(*) = 1)
Run Code Online (Sandbox Code Playgroud)

sesskey字段不能成为主键,因为它重复了.

mysql group-by sql-delete

7
推荐指数
1
解决办法
8664
查看次数

使用HQL语句按id列表删除多个记录

我想删除某个实体的多个记录,其中实体的id在我拥有的ID列表中.我正在尝试使用NHibernate在C#中执行此操作.

我所拥有的是一个ID列表.

我想做类似的事情:

var idList = new List<Guid>() { Guid.NewGuid(),Guid.NewGuid()};

_session.CreateQuery("DELETE FROM MapsItem o WHERE o.Id = IN :idList")
    .SetParameterList("idList", idList)
    .ExecuteUpdate();
Run Code Online (Sandbox Code Playgroud)

这导致以下错误:

Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1, column 33 [DELETE FROM Album o WHERE o.Id = IN  :idList]
Run Code Online (Sandbox Code Playgroud)

该查询是一个HQL语句.

HQL查询有什么问题.

对上述问题提供的两个答案都给出了正确的解决方案.但是,当我执行HQL时,错误是这样的:

could not insert/select ids for bulk delete[SQL: insert into #MapsItem SELECT mapsitem0_.Id as Id FROM MapsItem mapsitem0_ inner join BaseEntity mapsitem0_1_ on mapsitem0_.Id=mapsitem0_1_.Id WHERE Id in (? , ? , ? , ? , …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate hql sql-delete

7
推荐指数
1
解决办法
5920
查看次数

MySQL:为什么DELETE比INSERT更加CPU密集?

我目前正在大学学习"性能评估"课程,我们现在正在做一项测试,我们正在测试PHP和MySQL数据库服务器上的CPU使用情况.我们使用httperf来创建自定义流量,使用vmstat来跟踪服务器负载.对于INSERT和DELETE(单独运行),我们正在运行3000个与PHP服务器的连接.

数字显示DELETE操作比INSERT更加占用CPU - 而我只是想知道为什么?

我最初认为INSERT需要更多的CPU使用,因为需要重新创建索引,需要将数据写入磁盘等等.但显然我错了,我想知道是否有人可以告诉我这方面的技术原因.

mysql cpu-usage sql-insert sql-delete

7
推荐指数
2
解决办法
1625
查看次数

Sql Server删除和合并性能

我的表中包含一些买入/卖出数据,其中包含大约8M的记录:

CREATE TABLE [dbo].[Transactions](
[id] [int] IDENTITY(1,1) NOT NULL,
[itemId] [bigint] NOT NULL,
[dt] [datetime] NOT NULL,
[count] [int] NOT NULL,
[price] [float] NOT NULL,
[platform] [char](1) NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

每个X分钟我的程序为每个itemId获取新的事务,我需要更新它.我的第一个解决方案是两步DELETE + INSERT:

delete from Transactions where platform=@platform and itemid=@itemid
insert into Transactions (platform,itemid,dt,count,price) values (@platform,@itemid,@dt,@count,@price)
[...]
insert into Transactions (platform,itemid,dt,count,price) values (@platform,@itemid,@dt,@count,@price)
Run Code Online (Sandbox Code Playgroud)

问题是,这个DELETE语句平均需要5秒.这太长了.

我找到的第二个解决方案是使用MERGE.我创建了这样的存储过程,wchich采用表值参数:

CREATE PROCEDURE [dbo].[sp_updateTransactions]
@Table dbo.tp_Transactions readonly,
@itemId bigint,
@platform char(1)
AS
BEGIN
MERGE Transactions AS TARGET
USING @Table AS SOURCE  
ON (    
TARGET.[itemId] …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server merge sql-delete

7
推荐指数
2
解决办法
4530
查看次数

在单个查询中从DB2中的表中删除重复的行

我有一个包含3列的表格如下:

one   |   two    |  three  |   name
------------------------------------
 A1       B1          C1        xyz
 A1       B1          C1        pqr      -> should be deleted
 A1       B1          C1        lmn      -> should be deleted
 A2       B2          C2        abc
 A2       B2          C2        def      -> should be deleted
 A3       B3          C3        ghi
------------------------------------ 
Run Code Online (Sandbox Code Playgroud)

该表没有任何主键列.我对表没有任何控制权,因此我无法添加任何主键列.

如图所示,我想删除一列,两列和三列组合相同的行.因此,如果A1B1C1发生三次(如上所述),则应删除其他两个,只留下一个.

如何通过DB2中的一个查询实现这一目标?

我的要求是单个查询,因为我将通过java程序运行它.

sql db2 sql-delete

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

根据此表和另一个表中的行值删除一个表中的行

似乎有这样的一些问题,但没有一个完全相同,所以这里是:

我需要找到一种方法来删除一个表中的行,其中另一个表中有一行,其中两个字段等于原始表中的两个字段.(在下面的例子中,这将是:我需要找到一种方法来删除@All中包含@ All.Stall = @ Grouped.Stall和@ All.Fruit = @ Grouped.Fruit的行

例如:

@All:要删除行的表:

Stall       Fruit
-------------------
John        Apples
John        Pears
John        Pineapple
Mary        Apples
Mary        Apples
Mary        Pears
Mary        Pineapple
Run Code Online (Sandbox Code Playgroud)

@Grouped:要从中删除行的表:

Stall       Fruit
-------------------
Mary        Apples
Run Code Online (Sandbox Code Playgroud)

结果表应如下所示:

Stall       Fruit
-------------------
John        Apples
John        Pears
John        Pineapple
Mary        Pears
Mary        Pineapple
Run Code Online (Sandbox Code Playgroud)

请注意,这两行包含:Mary | 苹果不见了.

对于我的生活,我无法弄清楚如何做到这一点,并且只能让它删除包含苹果的所有三行而不留下一个John 苹果.

以下是创建两个临时表的查询,如果有人能够提供帮助:

@All - 要删除行的表

@Grouped - 包含要从@All中删除的字段的表

DECLARE @All TABLE(
    Stall varchar(10),
    Fruit varchar(10),
    StallFruitID int
)

DECLARE @Grouped TABLE(
    Stall varchar(10), …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-delete

7
推荐指数
1
解决办法
9297
查看次数

如果另一个表中不存在id,则从表中删除

我想删除types无法找到的id ,types_photos但我不知道如何实现这一目标.id_typetypes_photos是一样idtypes.这是表的结构如何:

CREATE TABLE IF NOT EXISTS `types` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_user_added` int(11) DEFAULT '0',
  `id_user_edited` int(11) DEFAULT '0',
  `data_name` text NOT NULL,
  `data_name_seo` text NOT NULL,
  `data_type` enum('tag','equipment','search') NOT NULL,
  `datetime_added` datetime NOT NULL,
  `datetime_edited` datetime NOT NULL,
  `ipaddress_added` text NOT NULL,
  `ipaddress_edited` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
)

CREATE TABLE IF NOT EXISTS `types_photos` (
  `id` int(11) NOT …
Run Code Online (Sandbox Code Playgroud)

sql multiple-tables sql-delete

7
推荐指数
1
解决办法
8282
查看次数

使用INNER JOIN从2个表中删除

我有3张桌子.

  • InvoiceOriginal
  • 发票
  • InvoiceHistory

invoice表具有外键约束.发票表中的每个条目在Invoiceoriginal中都有相应的条目.

invoiceOriginal表存储发票的原始值,发票表存储用户已修改的值.这样做是为了在提交时得到不同之处.

我正在使用的SQL是

DELETE i
FROM invoice i
INNER JOIN InvoiceHistory aih
   ON i.ClientId = aih.HistoryClientNumber
   AND i.invoiceNumber = HistoryInvoiceNumber
Run Code Online (Sandbox Code Playgroud)

但是由于外键约束而无法删除.

该表如下:

Invoice         InvoiceOriginal         InvoiceHistory
 Id                FK_InvoiceId            ClientId
 ClientId          ClientId                InvoiceNumber
 InvoiceNumber
Run Code Online (Sandbox Code Playgroud)

一旦InvoiceHistory中有相同clientId的发票编号条目,我需要删除发票和InvoiceOriginal中的条目.

sql sql-server sql-delete

7
推荐指数
1
解决办法
4783
查看次数

Laravel 5.4 - 从数据透视表中删除特定记录

每次访问我可能有很多产品; 因此,数据透视表(product_visit)具有以下字段:id,product_id,visit_id,qtd和amount.

要删除数据透视表上的访问及其相关记录,一切正常:

 public function getVisitDelete($id){
    $visits = Visit::find($id);
    $visits->products()->detach();
    $visits->delete();
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何使用detach或类似的东西从数据透视表中删除一个特定记录.所以我最终做了以下事情:

public function getProductVisitDelete(){
    $visit_id   =   (int)Request('visit_id');
    $product_id =   (int)Request('product_id');
    $sqlDelete = "delete from product_visit where visit_id=$visit_id and product_id = $product_id";
    DB::select($sqlDelete);
}
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但我对这个解决方案感到非常满意 - 看起来我错过了一些东西.

php many-to-many laravel sql-delete

7
推荐指数
1
解决办法
4323
查看次数

如何在SQL中按行号删除

我需要从行号475删除到948,因为它们是1-474行的重复。我想这可能与之接近,或者还有更多呢?

DELETE FROM dbo.industry WHERE row_number between 475 and 948
Run Code Online (Sandbox Code Playgroud)

ssms sql-delete

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