Как исправить INSERT INTO ... SELECT код, вставляющий много повторяющихся строк? - PullRequest
0 голосов
/ 20 октября 2019

У меня есть этот код, который предназначен для вставки 39 строк в DWPROD, но он вставляет 7056 повторяющихся строк. Может ли кто-нибудь помочь мне определить причину?

Пробовал разные коды, но пока не нашел решения.

INSERT INTO DWPROD (DWPRODID, DWSOURCETABLE, DWSOURCEID, PRODNAME, PRODCATNAME, PRODMANUNAME, PRODSHIPNAME)
SELECT dwprodSeq.nextval, 'a2product', p.prodid, p.prodname, pc.categoryname, m.manuname, s.description
FROM a2product p, a2shipping s, a2manufacturer m, a2prodcategory pc
WHERE p.rowid NOT IN (SELECT source_rowid FROM A2ERROREVENT);

Ожидаемый результат: 39 строк вставлено Фактический результат: 7056 строк вставлено

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Простой способ исправить это - сохранить отличительные для select

SELECT отличные 'a2product', p.prodid, p.prodname, pc.categoryname, m.manuname, s.description

Для этого вам нужно оставить 2, выбрать один внутри другого, последовательность на первом и выше, выбрать на первом.

Другой способ - найти условия присоединения таблиц, соответствующие условиям, но иметь несколько строк, соответствующих каждой записи. Затем обрабатывает их во внутреннем запросе

1 голос
/ 20 октября 2019

This:

FROM a2product p, a2shipping s, a2manufacturer m, a2prodcategory pc

возвращает декартово произведение из 4 таблиц, означающее произведение числа строк в каждой из этих таблиц. Если вы хотите объединить таблицы, используйте правильные объединения, например:

FROM a2product p 
INNER JOIN a2shipping s ON ...........
INNER JOIN a2manufacturer m ON ............
INNER JOIN a2prodcategory pc ON ...............

Условия в предложениях ON будут ограничивать количество строк и, возможно, вы получите 39 нужных строк.

...