我有一个包含4个条目的表。
CREATE TABLE tab(
name Text
);
INSERT INTO "tab" VALUES('Intertek');
INSERT INTO "tab" VALUES('Pntertek');
INSERT INTO "tab" VALUES('Ontertek');
INSERT INTO "tab" VALUES('ZTPay');
Pntrtek& Ontertek是正确拼写的Intertek的模糊复制品。我希望创建一个由模糊副本和正确拼写的名称组成的列表。但是,如果LIKE搜索没有找到模糊副本,我不希望列表包含正确拼写的名称。
以下行告诉我有多少条目符合我的模糊搜索条件:
SELECT COUNT(name)
FROM tab
WHERE name LIKE '%ntertek' ;
SELECT COUNT(name)
FROM tab
WHERE name LIKE '%TPay' ;
这很好,分别给出3和1。
我知道下一部分是错误的,但它表达了我想要发生的事情:
SELECT name
FROM tab
WHERE name LIKE '%ntertek'
GROUP BY name
HAVING COUNT(name) FROM tab WHERE name LIKE '%ntertek' > 1 ;
SELECT name
FROM tab
WHERE name LIKE '%TPay'
GROUP BY name
HAVING COUNT(name) FROM tab WHERE name LIKE '%TPay' > 1 ;
在我看来,这应该创建以下列表:Intertek,Ontertek,Entertek。
但我接近“FROM”:语法错误。
我有点像sql和编程的新手一般,所以任何帮助将不胜感激。
提前感谢您的帮助。
答案 0 :(得分:1)
如果您使用GROUP BY name
,则每个不同的name
都会有一个单独的组,然后您将无法计算相似的名称。
您应该使用子查询:
SELECT name
FROM tab
WHERE name LIKE '%ntertek'
AND (SELECT COUNT(*)
FROM tab
WHERE name LIKE '%ntertek') > 1
答案 1 :(得分:0)
我相信您正在寻找SELECT DISTINCT
SELECT DISTINCT name
FROM tab
WHERE name LIKE '%ntertek';