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.