2

我需要运行一个查询,该查询将为我提供一列中所有条目的列表,这些条目与另一列中的任何条目都不一样,即:

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 从 TABLE1 T1 LEFT JOIN TABLE2 T2 ON T1.COLUMNA LIKE '%' + T2.COLUMNB + '%' AND T2.COLUMNB 为 NULL

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

谢谢。

4

3 回答 3

3
SELECT DISTINCT columnA
FROM tableA as O
WHERE not exists ( select 42 from TableA where O.ColumnA like ColumnB )
于 2013-05-21T16:43:00.453 回答
2

我会尝试类似的东西:

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

或遵循criticalfix的评论(因为我不确定你到底想要什么)

SELECT DISTINCT columnA FROM tableA tbA
WHERE not exists ( select 1 from TableA where tbA.ColumnA like '%' + ColumnB '%' )
于 2013-05-21T16:36:40.723 回答
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
于 2013-05-21T16:39:30.190 回答