5

我试图弄清楚如何使用表 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)。

4

3 回答 3

8

我认为这会做到:

SELECT FieldName
FROM TableName
LEFT JOIN TableName2 ON UPPER(ColumnName) LIKE TableName2.FieldName2 + '%'
WHERE TableName2.FieldName2 IS NULL
于 2009-01-09T22:40:11.527 回答
5

不知道这会有多有效,但它应该可以工作:

SELECT FieldName 
FROM TableName t1
WHERE NOT EXISTS (
    SELECT *
    FROM TableName2 t2
    WHERE t1.FieldName LIKE t2.FieldName2 + '%'
)
于 2009-01-09T22:41:52.337 回答
2
SELECT * FROM table_A 
LEFT OUTER JOIN table_B 
    ON (locate(table_b.column, UPPER(table_a.column)) == 1)
WHERE table_b.column IS NULL
于 2009-01-09T22:44:17.853 回答