比较同一个表中的子字符串

时间:2013-05-21 16:34:31

标签: sql sql-server tsql

我需要运行一个查询,它会给我一列中所有条目的列表,这些条目不像另一列中的任何条目,即:

SELECT DISTINCT columnA
FROM tableA
WHERE columnA NOT LIKE (SELECT columnB FROM tableA)

显然,上面的查询不起作用,我只是希望它能澄清我想要实现的目标。因此,举个例子,假设我的列包含以下内容:

COLUMNA:
ABCD
ABCE
BCDE
BCDF
BCDEF
GHIJ
GHIK

COLUMNB:
ABC
DEF
HIJ

我想要的结果是:

BCDE
BCDF
GHIK

表格中的列总共有396个值,因此仅手动输入值是不可行的。另外,如示例中所述,columnB中的值始终是columnA中值的子字符串,因此我还需要让我的查询与此进行比较。

提前感谢任何人可以提供的任何帮助,并且如果这个问题已经在其他地方得到解答,我也会道歉 - 我做了一次搜索但是找不到任何我能解释为解决这个特定要求的事情。

添加新信息 * *

因此,如上所述,我犯了一个巨大的错误,因为这两列是在不同的表中。尽管如此,以下修改califax的建议很容易:

SELECT DISTINCT COLUMNA FROM TABLE1 T1 LEFT JOIN TABLE2 T2 ON T1.COLUMNA喜欢'%'+ T2.COLUMNB +'%' AND T2.COLUMNB为空

但是,它仍然会返回COLUMNA的完整条目列表。我已经确认COLUMNB中有条目是COLUMNA条目的子字符串 - 为什么不过滤这些条目?

感谢。

3 个答案:

答案 0 :(得分:3)

SELECT DISTINCT columnA
FROM tableA as O
WHERE not exists ( select 42 from TableA where O.ColumnA like ColumnB )

答案 1 :(得分:2)

我会尝试类似的事情:

select distinct columnA from tableA where columnA not like '%' + columnB + '%'

或关注fixfix的评论(因为我不确定你到底想要什么)

SELECT DISTINCT columnA FROM tableA tbA
WHERE not exists ( select 1 from TableA where tbA.ColumnA like '%' + ColumnB '%' )

答案 2 :(得分:2)

执行自我加入,并查找不匹配的内容:

SELECT DISTINCT a1.ColumnA 
FROM TableA a1
LEFT JOIN TableA a2
ON a1.ColumnA LIKE '%' + a2.ColumnB + '%'
AND a2.ColumnB IS NULL

(我添加了一张主要的通配符,因为你在问题中澄清了所需的匹配。)

更新

如果有两个不同的表,b.ColumnB会显示不匹配的表:

SELECT DISTINCT a.ColumnA 
FROM TableA a
LEFT JOIN TableB b
ON a.ColumnA LIKE '%' + b.ColumnB + '%'
AND b.ColumnB IS NULL