2012-09-27 16 views
8

¿Existe una función UNION opuesta pero equivalente para mysql?SQL - ¿Hay una función UNION opuesta pero equivalente?

Sé que es posible hacer esto con una consulta más larga, pero tengo curiosidad sobre si existe o no una función equivalente.

tengo 2 sentencias de selección para 2 tablas diferentes

select state, state_name, id, idname, phone, mobile, home from table1 
select state, state_name, id, idname, phone, mobile, home from table2 

Y necesito una consulta que extrae sólo de tabla1 y sólo si idName, teléfono, móvil, casa de la tabla1 no coincide con tabla2

Por ejemplo: Tabla1 tiene

AK | Alaska | 1 | row6 | 453 | 567 | 123 

pero la Tabla 2 tiene:

AK | Alaska | 1 | row6 | 453 | 567 | 123 
AK | Alaska | 1 | row6 | NULL | 567 | 123 
AK | Alaska | 1 | tttttt | 453 | 567 | 123 

La consulta mostrará

AK | Alaska | 1 | row6 | NULL | 567 | 123 
AK | Alaska | 1 | tttttt | 453 | 567 | 123 

no se mostrará

AK | Alaska | 1 | row6 | 453 | 567 | 123 
+1

Qué base de datos? – beny23

Respuesta

19

En SQL estándar se puede utilizar el operador de ANSI SQL EXCEPT que es un análogo exacto de UNION

SELECT * FROM Table2 
EXCEPT 
SELECT * FROM Table1 

También hay un INTERSECTset operator que mostraría las filas que ambas fuentes tienen en común.

Desafortunadamente, ninguno de estos son compatibles con las versiones actuales de MySQL, por lo que debe utilizar una de estas otras 3 formas más detalladas de lograr una unión anti semi.

NOT IN vs. NOT EXISTS vs. LEFT JOIN/IS NULL

4

Si está utilizando Oracle, va a utilizar la cláusula MINUS.

statement 1 
MINUS 
statement 2 

o

statement 1 
WHERE NOT EXISTS (statement 2) 
Cuestiones relacionadas