Pregunta

Estoy tratando de descubrir cómo excluir elementos de una instrucción select de la tabla A usando una lista de exclusión de la tabla B. El problema es que estoy excluyendo según el prefijo de un campo.

Entonces, un valor de campo puede ser "FORD Muffler" y para excluirlo de una consulta básica que haría:

SELECT FieldName 
FROM TableName 
WHERE UPPER(ColumnName) NOT LIKE 'FORD%'

Pero para usar una lista de valores para excluir de una tabla diferente, usaría una Subconsulta como:

SELECT FieldName 
FROM TableName 
WHERE UPPER(ColumnName) NOT IN (Select FieldName2 FROM TableName2)

El problema es que solo excluye coincidencias exactas y no LIKE o comodines (%).

¿Cómo puedo realizar esta tarea? Rediseñar la tabla no es una opción, ya que es una tabla existente en uso.

EDITAR: Lo siento, estoy usando SQL Server (2005).

¿Fue útil?

Solución

Creo que esto lo hará:

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

Otros consejos

No sé cuán eficiente sería esto, pero debería funcionar:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top