sql - 在 SQL 中,如何检查与另一个相似的行值
问题描述
我正在使用 SQL Server (T-SQL)。我有一列包含行值 A、AB、ABC、AC。我想删除另一行包含的任何值。在这种情况下,我会留下 ABC 和 AC,因为 A 和 AB 包含在另外两个中。
我的想法是获取列的每个值并使用 LIKE 搜索整个列并计算返回的结果数如果它等于 1 则它不包含在其他行中。
这是一个好方法吗?我问是因为我不愿意使用循环/光标。
谢谢
这是从上面的解释中提取的代码示例:
CREATE TABLE #t (words varchar(10))
INSERT INTO #t
VALUES ('A'),('AB'),('ABC'),('AC')
使用游标,我想我会做类似的事情:
DECLARE @branches TABLE (words varchar(10), n int)
DECLARE @word VARCHAR(10)
DECLARE cursor_word CURSOR
FOR SELECT words FROM #t
OPEN cursor_word;
FETCH NEXT FROM cursor_word INTO @word
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @branches SELECT @word, COUNT(*) FROM #t WHERE words like CONCAT('%', @word ,'%')
FETCH NEXT FROM cursor_word INTO @word
END
CLOSE cursor_word
DEALLOCATE cursor_word
SELECT * FROM @branches WHERE n = 1
解决方案
你可以尝试类似的东西
SELECT *
FROM (
SELECT *
, Row_Number() OVER(ORDER BY Words) N -- Create identifier for the row
FROM #t
) t1
LEFT JOIN (
SELECT *
, Row_Number() OVER(ORDER BY Words) N -- Create identifier for the row
FROM #t
) t2 on t1.N <> t2.n -- Where the identifier is different
AND t2.Words LIKE t1.Words + '%' -- Where t2.Words starts with t1.Words
WHERE t2.Words IS NULL -- And there is no match of t2.
推荐阅读
- python - 从 setup.py 目录导入子包或模块
- c# - 我正在尝试使用 html 提交按钮运行 asp.net 方法,但该方法无法运行?
- python - 按下特定键时增加值,然后在表格中记录值
- python - 在 Python 中以另一个变量的值为条件创建一个变量
- java - Java方法不会执行多次
- javascript - 你能写两次'for'吗?
- java - 无法创建 tempDir。java.io.tmpdir 设置为 /tmp
- java - 向服务器 HPSM9.41 webtier 推荐的 Tomcat 的 Java 堆大小
- javascript - 在 JavaScript 中过滤对象数组?
- c++ - 运算符不匹配*=