Очевидно имате дублиращи се стойности и за двете присъединяващи се колони. Вместо декартовия продукт [INNER] JOIN
би произвел за това, искате всеки ред да се използва само веднъж . Можете да постигнете това, като добавите номер на ред (rn
) за дубликат и се присъединете на rn
допълнително.
Всяка таблица може да има повече или по-малко дубъли за същата стойност от другата, освен ако нямате допълнителни ограничения (като FK ограничение) - но във вашия въпрос няма нищо. За да запазите всички редове един би използвал FULL [OUTER] JOIN
. Но вие искате да запазите 10 000 записа в резултата, което е кардиналността на table2
. Така че трябва да е LEFT [OUTER] JOIN
на table1
(с 40 реда) - и изключете възможни прекомерни редове от 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;
Работи за Postgres или SQL Server. MySQL не поддържа прозоречни функции, ще ви е необходим заместител:
- SQL SELECT последен запис без ограничение
За да е ясно:LEFT JOIN
е просто стенография за LEFT OUTER JOIN
, така че вече използвате външно присъединяване. Вашето твърдение е недоразумение :
Използвам ZOHO отчети, които не поддържат външни присъединявания.