【发布时间】:2009-01-09 22:35:40
【问题描述】:
我试图弄清楚如何使用表 B 中的排除列表从表 A 中的 select 语句中排除项目。问题是我是根据字段的前缀排除的。
所以一个字段值可能是“FORD Muffler”并将它从我会做的基本查询中排除:
SELECT FieldName
FROM TableName
WHERE UPPER(ColumnName) NOT LIKE 'FORD%'
但要使用从不同表格中排除的值列表,我会使用子查询,例如:
SELECT FieldName
FROM TableName
WHERE UPPER(ColumnName) NOT IN (Select FieldName2 FROM TableName2)
问题在于它只排除完全匹配而不排除 LIKE 或通配符 (%)。
我怎样才能完成这项任务?重新设计表格不是一种选择,因为它是一个正在使用的现有表格。
编辑:对不起,我使用的是 SQL Server (2005)。
【问题讨论】:
-
Table2中的值是定长的还是可变的?
-
它们可以是不同的长度。
-
Joel 给出了一个很好的答案,但我只想指出,必须寻找一个子字符串来比较表之间是数据库设计问题的一个大危险信号。我不知道具体情况,所以我不能说,但您可能需要查看它,记住一列应该只包含一个事实。