Внутреннее соединение между таблицей и представлением дает декартово произведение обоих - PullRequest
0 голосов
/ 10 июля 2019

Когда я присоединяюсь к таблице с видом, я получаю декартово произведение как таблицы, так и вида

Я использую базу данных DB2. Я использовал INNER JOIN между таблицей и View, соединяя их на основе столбца, который присутствует и в Table, и в View

select * FROM  MYSCHEMA.TABLE_A a INNER JOIN MYSCHEMA.MY_VIEW_A va on a.PRICE_ID=va.PRICE_ID 

Моя таблица содержит 200 записей, а View возвращает 300 записей. Все PRICE_ID в TABLE_A совпадают со столбцом PRICE_ID из View. Вместо того, чтобы возвращать набор результатов 300, я получаю 60000 записей, присоединяясь к ним.

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Похоже, что в обеих таблицах одинаковое значение PRICE_ID.

Это достаточно легко проверить на наличие дубликатов:

select PRICE_ID, count(*)
from MYSCHEMA.TABLE_A a
group by PRICE_ID
having count(*) > 1
order by count(*) desc;

select PRICE_ID, count(*)
from MYSCHEMA.MY_VIEW_A va
group by PRICE_ID
having count(*) > 1
order by count(*) desc;

Дубликаты объясняют, почему у вас так много строк.

0 голосов
/ 10 июля 2019
select a.*
FROM MYSCHEMA.TABLE_A a
         INNER JOIN (select distinct PRICE_ID
                         MYSCHEMA.MY_VIEW_A) tmp on tmp.PRICE_ID = a.PRICE_ID
...