【发布时间】:2019-10-14 23:30:33
【问题描述】:
我得到数据,我想选择或删除查询以获得预期的结果
sql服务器查询
select *,
row_number() over (order by (select '' )) as seqnum
from [elo].[dbo].[objkeys]
where parentid in (select parentid
from [elo].[dbo].[objekte] inner join
[elo].[dbo].[objkeys]
on objid = parentid
where objmask = '52' and okeydata like 'approve'
)
//// 试试这个查询,但不行
与 cte AS( 选择 *, row_number() over (order by (select '' )) as seqnum 来自 [elo].[dbo].[objkeys] parentid 在哪里(选择 parentid 来自 [elo].[dbo].[objekte] 内连接 [elo].[dbo].[objkeys] 在 objid = parentid 其中 objmask = '52' 和 'approve' 之类的 okeydata ) ) 删除 cte where seqnum >1
实际结果
parentid okeyno okeyname okeydata
652 0 NAME uwk
652 1 NUMBER 1
652 2 ALAIETIMAD approve
652 51 ELO_FNAME 16.jpg
653 0 NAME uwk
653 1 NUMBER 1
653 2 ALAIETIMAD approve
653 51 ELO_FNAME 16.jpg
656 0 NAME b
656 1 NUMBER 1
656 2 ALAIETIMAD approve
656 51 ELO_FNAME 14.jpg
657 0 NAME b
657 1 NUMBER 1
657 2 ALAIETIMAD approve
657 51 ELO_FNAME 16.jpg
661 0 NAME abdalah
661 1 NUMBER 1
661 2 ALAIETIMAD approve
661 51 ELO_FNAME 16.jpg
662 0 NAME abdalah
662 1 NUMBER 1
662 2 ALAIETIMAD approve
662 51 ELO_FNAME 16.jpg
需要结果
parentid okeyno okeyname okeydata
652 0 NAME uwk
652 1 NUMBER 1
652 2 ALAIETIMAD approve
652 51 ELO_FNAME 16.jpg
656 0 NAME b
656 1 NUMBER 1
656 2 ALAIETIMAD approve
656 51 ELO_FNAME 14.jpg
661 0 NAME abdalah
661 1 NUMBER 1
661 2 ALAIETIMAD approve
661 51 ELO_FNAME 16.jpg
【问题讨论】:
-
请解释逻辑。
-
一次性获取用户的批准数据
-
删除 okeyname 中同名道具的重复数据
-
objmask like 52要么没有做你想做的事,要么是以一种不必要的混乱方式编写的。LIKE仅对字符串类型起作用,因此整数文字52将需要隐式转换。它在功能上与objmask = '52'相同(但您可能想要objmask = 52)。避免不必要的转换;如果以这种方式跳过索引,它们可能会对性能产生不良影响。 -
好的杰罗恩·莫斯特
标签: sql sql-server database select sql-delete