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