Het is duidelijk dat u dubbele waarden hebt voor beide samenvoegkolommen. In plaats van het Cartesiaanse product een [INNER] JOIN
hiervoor zou produceren, wilt u dat elke rij slechts één keer wordt gebruikt . U kunt dit bereiken door een rijnummer toe te voegen (rn
) per duplicaat en doe mee op rn
bovendien.
Elke tabel kan meer of minder dupes hebben voor dezelfde waarde dan de andere, tenzij je aanvullende beperkingen hebt (zoals een FK-beperking) - maar er staat niets in je vraag. Om alles te behouden rijen zou men een FULL [OUTER] JOIN
. gebruiken . Maar u wilt 10000 records in het resultaat behouden, wat de kardinaliteit is van table2
. Het moet dus een LEFT [OUTER] JOIN
. zijn op table1
(met 40 rijen) - en sluit mogelijke overmatige rijen uit van 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;
Werkt voor Postgres of SQL Server. MySQL ondersteunt geen vensterfuncties, u heeft een vervanging nodig:
- SQL SELECT laatste invoer zonder beperking
Voor de duidelijkheid:LEFT JOIN
is gewoon een afkorting voor LEFT OUTER JOIN
, dus u gebruikt al een outer join. Uw verklaring is een misverstand :
Ik gebruik ZOHO-rapporten die outer join's niet ondersteunen.