Obviamente, tiene valores duplicados para ambas columnas de unión. En lugar del producto cartesiano, un [INNER] JOIN
produciría para esto, quiere que cada fila se use solo una vez . Puede lograr esto agregando un número de fila (rn
) por duplicado y unión en rn
además.
Cada tabla puede tener más o menos duplicados por el mismo valor que la otra, a menos que tenga restricciones adicionales (como una restricción FK), pero no hay nada en su pregunta. Para mantener todo filas uno usaría un FULL [OUTER] JOIN
. Pero desea mantener 10000 registros en el resultado, que es la cardinalidad de table2
. Por lo tanto, debe ser un LEFT [OUTER] JOIN
en table1
(con 40 filas) - y excluye posibles filas excesivas de table1
.
SELECT t1."LocationArea", t2."Location"
FROM (
SELECT "Location"
, row_number() OVER (PARTITION BY "Location") AS rn
FROM table2
) t2
LEFT JOIN (
SELECT "LocationArea"
, row_number() OVER (PARTITION BY "LocationArea") AS rn
FROM table1
) t1 ON t1."LocationArea" = t2."Location"
AND t1.rn = t2.rn;
Funciona para Postgres o SQL Server. MySQL no admite funciones de ventana, necesitaría un sustituto:
- SQL SELECT última entrada sin límite
Para ser claros:LEFT JOIN
es solo una abreviatura de LEFT OUTER JOIN
, por lo que ya está utilizando una combinación externa. Su declaración es un malentendido :
Estoy usando informes de ZOHO que no admiten combinaciones externas.