SQL исключить LIKE элементы из таблицы - PullRequest
5 голосов
/ 10 января 2009

Я пытаюсь выяснить, как исключить элементы из оператора select из таблицы A, используя список исключений из таблицы B. Уловка заключается в том, что я исключаю, основываясь на префиксе поля.

Таким образом, значение поля может быть "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 или Wildcards (%).

Как я могу выполнить эту задачу? Редизайн таблицы не вариант, так как используется существующая таблица.

РЕДАКТИРОВАТЬ: Извините, я использую SQL Server (2005).

Ответы [ 3 ]

8 голосов
/ 10 января 2009

Я думаю, что это сделает это:

SELECT FieldName
FROM TableName
LEFT JOIN TableName2 ON UPPER(ColumnName) LIKE TableName2.FieldName2 + '%'
WHERE TableName2.FieldName2 IS NULL
5 голосов
/ 10 января 2009

Не знаю, насколько эффективно это будет, но оно должно работать:

SELECT FieldName 
FROM TableName t1
WHERE NOT EXISTS (
    SELECT *
    FROM TableName2 t2
    WHERE t1.FieldName LIKE t2.FieldName2 + '%'
)
2 голосов
/ 10 января 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...