varios varias unir una tablas tabla sola misma inner ejemplo consultas consulta sql ms-access unique union

sql - varias - Crea una consulta UNION que identifica de qué tabla provienen los datos únicos



unir varias tablas de access en una sola (3)

La respuesta de Gord Thompson es correcta. Sin embargo, no es necesario hacer una distinción en las subconsultas. Y puede devolver una sola columna con la información que está buscando:

select customer_id, iif(min(which) = max(which), min(which), "both") as DataSource from (select customer_id, "tblone" as which from tblOne UNION ALL select customer_id, "tbltwo" as which from tblTwo ) t group by customer_id

Tengo dos tablas con datos. Ambas tablas tienen una columna CUSTOMER_ID (que es numérica). Estoy intentando obtener una lista de todos los valores únicos para CUSTOMER_ID y saber si CUSTOMER_ID existe o no en ambas tablas o solo una (y cuál).

Puedo obtener fácilmente una lista del CUSTOMER_ID único:

SELECT tblOne.CUSTOMER_ID FROM tblOne.CUSTOMER_ID UNION SELECT tblTwo.CUSTOMER_ID FROM tblTwo.CUSTOMER_ID

No puedo agregar una columna de identificador a SELECT statemtn (como: SELECT tblOne.CUSTOMER_ID, "Table1" AS DataSource ) porque los registros no serían únicos y obtendrían ambos conjuntos de datos.

Siento que necesito agregarlo a otro lugar en esta consulta, pero no estoy seguro de cómo.

Editar para mayor claridad:

Para la salida de consulta de unión, necesito una columna adicional que me diga si el valor único que estoy viendo existe en: (1) ambas tablas, (2) tabla uno o (3) tabla dos.


Podríamos agregar una columna de identificador con el tipo de datos entero y luego hacer una consulta externa:

SELECT CUSTOMER_ID, sum(Table) FROM ( SELECT DISTINCT CUSTOMER_ID, 1 AS Table FROM tblOne UNION SELECT DISTINCT CUSTOMER_ID, 2 AS Table FROM tblTwo ) GROUP BY CUSTOMER_ID`

Entonces, si la "suma es 1", proviene de tablOne y si es 2, proviene de la tabla Dos y si es 3, entonces existe en ambos

Si desea agregar una tercera mesa en la unión, entonces déle un valor de 4 para que tenga una suma única para cada combinación


Si el CUSTOMER_ID aparece en ambas tablas, entonces tendremos que elegir arbitrariamente qué tabla llamar al origen. La siguiente consulta usa "tblOne" como [SourceTable] en ese caso:

SELECT CUSTOMER_ID, MIN(Source) AS SourceTable, COUNT(*) AS TableCount FROM ( SELECT DISTINCT CUSTOMER_ID, "tblOne" AS Source FROM tblOne UNION ALL SELECT DISTINCT CUSTOMER_ID, "tblTwo" AS Source FROM tblTwo ) GROUP BY CUSTOMER_ID