2012-02-27 14 views
5

¿Cómo puedo, en MySQL, comprobar si un valor está dentro de un número de campos de otra tabla?MySQL - NO EN COMO

Algo así como

SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable) 

Pero no creo que sea del todo bien, ¿verdad?

Respuesta

2

La siguiente consulta debería hacerlo.

SELECT DISTINCT t.* 
FROM table t, 
     anothertable a 
WHERE a.field NOT LIKE Concat('%', t.`value`, '%'); 
+0

¿Sería esto más rápido o mejor de alguna manera? –

+0

Sí, si el campo y el valor están indexados, será mucho más rápido –

+0

He comparado los dos, este es 4 veces más rápido que el primero. –

2

No, no del todo.

SELECT * FROM table WHERE NOT EXISTS (
    SELECT * from anothertable WHERE field LIKE CONCAT('%',value,'%') 
) 

probablemente lo haga. Suponiendo que value es una columna en table, y field es la columna correspondiente en anothertable que puede contener o no value como una subcadena.

Se advirtió, sin embargo - esto va a ser una consulta muy lento, si anothertable contiene muchas filas. No creo que haya un índice que pueda ayudarlo. MySQL tendrá que realizar una exploración de tabla comparativa de cadenas de anothertable para cada fila en table.

+0

que pensé que sería lenta , pero solo estoy ejecutando una consulta de mantenimiento por única vez. –

+0

Por cierto, acabo de actualizar para un error tipográfico: no tenía 'ME GUSTA' en lugar de 'ME GUSTA' en la sub consulta. –

+0

Sí, capté ese error tipográfico. –

0

Si entiendo bien su pregunta (suponiendo que desea conocer el valor de la mesa en 2 campos (campo1 y campo2) en "anothertable"):

SELECT * 
FROM table t 
WHERE EXISTS (SELECT Count(*) FROM anothertable WHERE field1 LIKE concat('%',t,value,'%') OR field2 LIKE concat('%',t,value,'%') 
Cuestiones relacionadas