列出包含部分相同数据的行。部分并不总是相同

时间:2019-10-23 00:46:44

标签: sql sql-server

在名为devices的表中有一个与此类似的列表:

devicename   icon_color
Device1      icon_red
Device1 (1)  icon_green
sfsdfsd      icon_green
aaaaaaa (1)  icon_red
bbbbbbb      icon_green
bbbbbbb (1)  icon_red
bbbbbbb (2)  icon_red

我需要输出:

A-设备名称相似(仅用于控制)的所有设备的列表。类似地,我指的是名称相同的设备。两者之间的不同之处在于括号中的内容。因此,例如,查询应将bbbbbbb,bbbbbbb(1)和bbbbbbb(2)列为“相似”。

在此列表中为:

devicename   icon_color
Device1      icon_red
Device1 (1)  icon_green
bbbbbbb      icon_green
bbbbbbb (1)  icon_red
bbbbbbb (2)  icon_red

B- A-的结果,但在icon_color='icon_red'上进行了过滤(这正是我在这里所需要的)。在此列表中为:

devicename   icon_color
Device1      icon_red
bbbbbbb (1)  icon_red
bbbbbbb (2)  icon_red

我尝试了很多事情,但都没有成功。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

嗯。 。 。这似乎可以满足您的要求:

sdk v4

这会寻找一个相似的设备名称,后跟一个空格。

答案 1 :(得分:1)

您的第一个要求,使用having子句

select * from devices where exists 
    (select devicename from devices
    group by devicename 
    having count(1) > 1)

对于您的第二个要求,只需添加where子句

select * from devices where exists 
    (select devicename from devices
    group by devicename 
    having count(1) > 1)
where icon_color = 'icon_red'