SQL表具有以下数据,共有3列
Id, 名称和 全名。
| ID | Name | FullName |
| 1 | a | a |
| 2 | b | ab |
| 3 | c | abc |
| 4 | d | ad |
| 5 | e | ade |
| 6 | i | i |
| 7 | g | ig |
例如,在ID = 1和ID的行中,“全名”列的值分别为“ a”和“ ab”。此数据是第3行(id = 3)全名列数据'abc'的子字符串。
如何排除Id = 1和Id = 2行,因为'全名'列数据是Id = 3行中FullName列值'abc'的子字符串。
所需的输出
| ID | Name | FullName |
| 3 | c | abc |
| 5 | e | ade |
| 7 | g | ig |
答案 0 :(得分:0)
这是一个似乎有效的查询。我们可以将匹配的全名用短语表示为没有该全名的父母。
SELECT t1.*
FROM yourTable t1
WHERE
NOT EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.FullName LIKE '%' + t1.FullName + '%' AND
LEN(t2.FullName) > LEN(t1.FullName));
答案 1 :(得分:0)
这是一个解决方案:
CREATE TABLE MyTable(
ID INT,
Name VARCHAR(45),
FullName VARCHAR(90)
);
INSERT INTO MyTable VALUES
(1, 'a', 'a'),
(2, 'b', 'ab'),
(3, 'c', 'abc'),
(4, 'd', 'ad'),
(5, 'e', 'ade'),
(6, 'i', 'i'),
(7, 'g', 'ig');
SELECT *
FROM MyTable
WHERE ID NOT IN (
SELECT DISTINCT T1.ID
FROM MyTable T1 INNER JOIN MyTable T2
ON T1.ID <> T2.ID
AND T2.FullName LIKE '%' + T1.FullName + '%'
);
结果:
+----+----+------+----------+
| | ID | Name | FullName |
+----+----+------+----------+
| 1 | 3 | c | abc |
| 2 | 5 | e | ade |
| 3 | 7 | g | ig |
+----+----+------+----------+