SQL Exclure les éléments LIKE de la table
Question
J'essaie de comprendre comment exclure des éléments d'une instruction select de la table A à l'aide d'une liste d'exclusion de la table B. Le problème est que j'exclus en fonction du préfixe d'un champ.
Une valeur de champ peut donc être "FORD Muffler". et pour l'exclure d'une requête de base, je le ferais:
SELECT FieldName
FROM TableName
WHERE UPPER(ColumnName) NOT LIKE 'FORD%'
Mais pour utiliser une liste de valeurs à exclure d'un autre tableau, j'utiliserais une sous-requête telle que:
SELECT FieldName
FROM TableName
WHERE UPPER(ColumnName) NOT IN (Select FieldName2 FROM TableName2)
Le problème est qu’il n’exclut que les correspondances exactes et non pas LIKE ou les caractères génériques (%).
Comment puis-je accomplir cette tâche? La refonte de la table n’est pas une option car c’est une table existante utilisée.
EDIT: Désolé, j'utilise SQL Server (2005).
La solution
Je pense que cela va le faire:
SELECT FieldName
FROM TableName
LEFT JOIN TableName2 ON UPPER(ColumnName) LIKE TableName2.FieldName2 + '%'
WHERE TableName2.FieldName2 IS NULL
Autres conseils
Je ne sais pas dans quelle mesure cela serait efficace, mais cela devrait fonctionner:
SELECT FieldName
FROM TableName t1
WHERE NOT EXISTS (
SELECT *
FROM TableName2 t2
WHERE t1.FieldName LIKE t2.FieldName2 + '%'
)
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