SQL从表中排除LIKE项

时间:2009-01-09 22:35:40

标签: sql subquery

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

3 个答案:

答案 0 :(得分:8)

我认为这样做会:

SELECT FieldName
FROM TableName
LEFT JOIN TableName2 ON UPPER(ColumnName) LIKE TableName2.FieldName2 + '%'
WHERE TableName2.FieldName2 IS NULL

答案 1 :(得分:5)

Dunno这会有多高效,但应该有效:

SELECT FieldName 
FROM TableName t1
WHERE NOT EXISTS (
    SELECT *
    FROM TableName2 t2
    WHERE t1.FieldName LIKE t2.FieldName2 + '%'
)

答案 2 :(得分: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