Я хочу получить выбор всех товаров (ART.ARTKEYI), которые назначены элементу (PRO.PROKEYI), но элемент которого не назначен ни одному магазину (PSZ.PSZPROKEYI).
БД структурирована так:
Таблица AEZ связывает Статьи (ART.ARTKEYI = 1234) и Элементы (PRO.PROKEYI = 9876)
AEZ:
AEZPROKEYI <--> AEZARTKEYI
9876________________1234
Таблица PSZ соединяет элементы (PRO.PROKEYI) и магазины (SHO.SHOKEYI)
ПСЗ:
PSZSHOKEYI <--> PSZPROKEYI
9999999999________9876
Я хочу выбрать все ART.ARTKEYI (и ART.ARTBEZC, если это возможно), присутствующие в AEZ.AEZARTKEYI (имеющие соответствующий AEZPROKEYI), но только если AEZPROKEYI отсутствует в PSZ.PSZPROKEYI
Я попытался сделать следующий выбор (но я не совсем уверен, может ли это вообще сработать!)
<SQL>
SELECT DISTINCT
artkeyi, artbezc, prokeyi
FROM ART, pro, aez
where
aez.aezartkeyi = art.artkeyi
and
aez.aezprokeyi = pro.prokeyi
and
proetykeyi = 1 /* only Elements of the 'Product' type*/
and
not exists (select 1 from CMKAT.pro, psz where pro.prokeyi =
PSZ.pszprokeyi)
;
</SQL>
Я получаю подборку всех статей (миллионы). Должно быть ограничено несколькими тысячами.
Это должно быть включено в некоторую функцию фильтра в программе, которую мы используем, где применяются некоторые предварительные условия:
1. Макс 2000 символов
2. «Выбрать * из АРТ, где» является данным
Когда я пытаюсь запустить следующий код:
SELECT DISTINCT
art.artkeyi
FROM CMKAT.AEZ
INNER JOIN CMKAT.PRO
ON aez.aezprokeyi = pro.prokeyi
INNER JOIN CMKAT.ART
ON aez.aezartkeyi = art.artkeyi
and pro.proetykeyi = 1
and
not exists
(select * from CMKAT.PSZ where pro.prokeyi = PSZ.pszprokeyi)
;
Я получаю подборку ВСЕХ статей.
Код должен быть отформатирован для фильтра так:
artkeyi IN (SELECT art.artkeyi FROM CMKAT.AEZ INNER JOIN CMKAT.PRO ON aez.aezprokeyi = pro.prokeyi INNER JOIN CMKAT.ART ON aez.aezartkeyi = art.artkeyi and pro.proetykeyi = 1 and not exists (select * from CMKAT.PSZ where pro.prokeyi = PSZ.pszprokeyi))
(я не уверен на 100% в части artkeyi IN)
Таблица АРТ:
ARTKEYI, ARTKTYKEYI, ARTKAVKEYI, ARTUNJKEYI, ARTATYKEYI, ARTKOPI, ARTBEZC, ARTINFC, ARTANRC, ARTBNRC, ARTVNRS
18592293 1 1 8486 24260605 InkJet-Papier 225912 225912 71
Стол AEZ
"AEZPROKEYI" "AEZKAVKEYI" "AEZARTKEYI" "AEZUNJKEYI" "AEZNUMS" "AEZBPRC" "AEZBPOC" "AEZIMPC" "AEZDLAD"
1813235 1 18592293 12207711 0 "" "" "StdImp:" 20.06.18 17:31:26,000000000
Стол PRO
"PROKEYI" "PROKATKEYI" "PROKAVKEYI" "PROETYKEYI" "PROUNJKEYI" "PROBEZC"
1813235 1 1 1 12207711 "InkJet-Papier"