我有一个主键表,如下所示:
FIRSTKEY〜ABC
SECONDKEY〜DEF
FIRSTKEY〜DEF
我想编写一个SELECT语句,它会删除波浪号后面的段,并在波浪后波段消失后返回所有重复的行。也就是说,
选择......
给我:
FIRSTKEY〜ABC
FIRSTKEY〜DEF
作为“重复”。
我已经有点使用SUBSTRING来剥离结束段:
SELECT FROM SUBSTRING(COLUMN,0,CHARINDEX('〜',COLUMN))FROM TABLE
这是在SQL Server上。
答案 0 :(得分:3)
试一试
SELECT SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)), COUNT(*) FROM TABLE
GROUP BY SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN))
HAVING COUNT(*) > 1
答案 1 :(得分:0)
给出的第一个解决方案将识别关键前缀;将它扩展一点以获得以这些键开头的表行:
SELECT *
FROM TABLE
WHERE SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)) IN
(
SELECT SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)) FROM TABLE
GROUP BY SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN))
HAVING COUNT(*) > 1
)
或者,您可以在包含前缀的临时表和原始表之间使用连接 - 如果前缀的数量变得非常大,则使用“where in”会变得非常昂贵。