varios valores una tablas tabla registros operador misma ejemplos consultas comparar coincidentes coincidencias campos buscar sql sql-server-2005 tsql

valores - operador like sql



T-SQL: ComparaciĆ³n de dos tablas: registros que no existen en la segunda tabla (7)

Si UNION ALL es una adición en T-SQL. ¿Cuál es el equivalente de la resta?

Por ejemplo, si tengo una tabla PEOPLE y una tabla EMPLOYEES . Y sé que si EMPLOYEES registros de EMPLOYEES de PEOPLE , quedaré con mis empresas CONTRACTORS .

¿Hay alguna forma de hacer esto que sea similar a UNION ALL ? ¿Uno en el que no tengo que especificar ningún nombre de campo? La razón por la que pregunto es que este es solo un ejemplo hipotético. Necesito hacer esto varias veces en muchas tablas diferentes. Supongamos que el esquema de EMPLOYEES y PEOPLE es el mismo.



Lamentablemente, hay un problema en su diseño. en lugar de tener dos personas de la mesa y el CONTRATISTA. Debería tener una tabla PEOPLE y otra Table TYPE (si algunas personas pueden tener varios roles, quizás se necesite otra tabla). En su tabla PEOPLE usted hace una referencia a la tabla TYPE.

entonces tus peticiones se vuelven

SELECT * from PEOPLE, TYPE WHERE PEOPLE.type_id = TYPE.id AND TYPE.name = ''CONTRACTOR'' SELECT * from PEOPLE, TYPE WHERE PEOPLE.type_id = TYPE.id AND TYPE.name = ''EMPLOYEE''

(no probado)


Puede usar el operador EXCEPT para restar un conjunto de otro. Aquí hay una muestra de código que usa EMPLEADOS y PERSONAS tablas temporales. Necesitarás usar los nombres de campo con el operador EXCEPTT hasta donde yo sé.

CREATE TABLE #PEOPLE (ID INTEGER, Name NVARCHAR(50)) CREATE TABLE #EMPLOYEE (ID INTEGER, Name NVARCHAR(50)) GO INSERT #PEOPLE VALUES (1, ''Bob'') INSERT #PEOPLE VALUES (2, ''Steve'') INSERT #PEOPLE VALUES (3, ''Jim'') INSERT #EMPLOYEE VALUES (1, ''Bob'') GO SELECT ID, Name FROM #PEOPLE EXCEPT SELECT ID, Name FROM #EMPLOYEE GO

La consulta final devolverá las dos filas en la tabla PEOPLE que no existen en la tabla EMPLOYEE.


SELECT P.* FROM People P LEFT OUTER JOIN Employees E ON E.ID = P.ID -- Or whatever your PK-FK relationship is WHERE E.ID IS NULL

Para SQL Server, esta será probablemente la forma más efectiva de hacerlo.


SELECT * FROM Table1 WHERE Table1.Key NOT IN (SELECT Table2.Key FROM Table2 WHERE Table2.Key IS NOT NULL)

Se agregó IS NOT NULL para hacer felices a la gente.

Estoy de acuerdo con Tom. Su versión es probablemente más eficiente. La única razón posible para usar la mía, podría ser que es más bonita.


Descubrí que es mucho más fácil usar una herramienta como SQLMerger para hacer esto por usted. Los resultados se muestran de una manera más agradable y puede continuar con lo que necesite hacer con los datos a partir de entonces fácilmente.

www.auisoft.com/SQLMerger <= la herramienta que facilita la comparación de datos

ejemplo al comparar dos tablas: http://auisoft.com/SQLMerger/How-to/visualize-differences-in-2-databases/


Cuando comparo tablas buscando datos que no están en uno que está en el otro, normalmente utilizo SQL Division.

select *(or selected matching field) from tableA as A where not exist (select *(or selected matching field) from tableB as B where A.key = B.key)

Esta consulta devolverá los resultados que están en la tabla A que no están en el proceso de división.

select *(or selected matching field) from tableA as A where exist (select *(or selected matching field) from tableB as B where A.key = B.key)

Esta consulta devolverá todas las filas de datos que coinciden en ambas tablas, por lo tanto, si hay una fila de datos que está en la tabla A que no está en la tabla B, esa fila de datos no se recuperará.