我有一个表有两个字段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字段不能成为主键,因为它重复了.
我想删除某个实体的多个记录,其中实体的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) 我目前正在大学学习"性能评估"课程,我们现在正在做一项测试,我们正在测试PHP和MySQL数据库服务器上的CPU使用情况.我们使用httperf来创建自定义流量,使用vmstat来跟踪服务器负载.对于INSERT和DELETE(单独运行),我们正在运行3000个与PHP服务器的连接.
数字显示DELETE操作比INSERT更加占用CPU - 而我只是想知道为什么?
我最初认为INSERT需要更多的CPU使用,因为需要重新创建索引,需要将数据写入磁盘等等.但显然我错了,我想知道是否有人可以告诉我这方面的技术原因.
我的表中包含一些买入/卖出数据,其中包含大约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) 我有一个包含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程序运行它.
似乎有这样的一些问题,但没有一个完全相同,所以这里是:
我需要找到一种方法来删除一个表中的行,其中另一个表中有一行,其中两个字段等于原始表中的两个字段.(在下面的例子中,这将是:我需要找到一种方法来删除@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) 我想删除types无法找到的id ,types_photos但我不知道如何实现这一目标.id_type在types_photos是一样id的types.这是表的结构如何:
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) 我有3张桌子.
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中的条目.
每次访问我可能有很多产品; 因此,数据透视表(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)
虽然它有效,但我对这个解决方案感到非常满意 - 看起来我错过了一些东西.
我需要从行号475删除到948,因为它们是1-474行的重复。我想这可能与之接近,或者还有更多呢?
DELETE FROM dbo.industry WHERE row_number between 475 and 948
Run Code Online (Sandbox Code Playgroud) sql-delete ×10
sql ×4
sql-server ×3
mysql ×2
t-sql ×2
c# ×1
cpu-usage ×1
db2 ×1
group-by ×1
hql ×1
laravel ×1
many-to-many ×1
merge ×1
nhibernate ×1
php ×1
sql-insert ×1
ssms ×1