2011-04-21 37 views
5

Tengo dos tablas: A contiene todos los datos, la tabla B se creó desde A y seleccionó% 25 de sus datos aleatoriamente. Entonces, A y B tienen exactamente las mismas columnas. Además, no hay una columna única.MySql Resta una tabla de otra

Lo que quiero hacer es restar B de A. ¿Alguna idea?

+0

Estoy confundido cuando dice restar. ¿Te refieres a filtro? Si filtra una tabla sobre otra, debe decidir qué columna o columnas se relacionan entre las dos y desea basar su patrón de filtro. – RetroCoder

+0

Sí, quiero filtrar todos los datos, que ya están en B, de A – osmanabi

+0

¿Desea eliminar los campos que aparecen en B de la tabla A, por lo que ya no hay entradas comunes? –

Respuesta

0

Es necesario crear una clave única (que sólo puede haber un número secuencial) en la tabla original y la que puede seleccionar igualado o registros no coincidentes (el 25% o el inverso)

0

lo recomiendo mucho hacer una columna de ID con incremento automático, pero si no se puede simplemente hacer:

borrar de una DONDE a.c1 = (SELECT c1 ab) A.C2 = (SELECT c2 ab) a.c3 = (SELECCIONAR c3 FROM b)

Lo siento, me acabo de dar cuenta de que solo funciona para una fila ...

Bueno, entonces lo único que tengo es hacer una columna de ID, lo siento ...

8

Para ver todas las filas de A excepto los de B:

SELECT * FROM A 
WHERE (field1, field2, ..., fieldN) NOT IN 
(SELECT * 
    FROM B 
) ; 

Para eliminar realidad de la mesa A las filas que están en B:

DELETE FROM A 
WHERE (field1, field2, ..., fieldN) IN 
(SELECT * 
    FROM B 
) ; 
+0

@Conrad: funciona en mi copia de MySQL (5.0.51). ¿En qué versión lo probaste? –

+0

Tengo 5.1 No funcionó para mí tampoco – osmanabi

+0

Mi error cometí una falta de edición para poder cambiar mi voto, y borré mi comentario –

1

Teniendo en cuenta que usted está comparando varios campos que tendrá que tampoco existe uso o joi norte. ya que está buscando eliminar es más fácil yi solo existe el uso.

 delete from 
     Tablea 
     Where 
     Exists(
       Select 1 
       from tableb 
       where tablea.fielda = tableb.fielda 
        And tablea.fieldb = Tableb.fieldb 
        And...) 
1

Tengo un requisito muy similar a la suya, salvo que por la mía, B es simplemente un subconjunto de A. Si usted todavía está buscando una respuesta:

SELECT * FROM A WHERE NOT EXIST 
(SELECT * FROM B WHERE A.field1 = B.field1 AND A.field2 = B.field2 etc) 

Usted necesitaría especifique la misma condición que haciendo una unión interna en A y B.

Cuestiones relacionadas