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).

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top