Без примеров данных и схемы трудно быть уверенным, но я думаю, вам не хватает некоторых скобок. Условие OR
означает, что ваш запрос оценивает все ваши условия AND
, и , а затем дополнительно добавляет условие OR
; это, вероятно, приводит к огромному набору данных, что объясняет бесконечную обработку.
Select a.UPC_DESC,
a.IRI_KEY ,
a.WEEK ,
a.Price_per_unit,
a.Preis_pro_unze,
b.UPC_DESC,
b.IRI_KEY ,
b.WEEK ,
b.Price_per_unit,
b.Preis_pro_unze,
c.UPC_DESC,
c.IRI_KEY ,
c.WEEK ,
c.Price_per_unit,
c.Preis_pro_unze,
case
when min(min(a.preis_pro_unze , b.preis_pro_unze , c.preis_pro_unze )) = a.preis_pro_unze then a.preis_pro_unze
when min(min(a.preis_pro_unze , b.preis_pro_unze , c.preis_pro_unze )) = b.preis_pro_unze then b.preis_pro_unze
when min(min(a.preis_pro_unze , b.preis_pro_unze , c.preis_pro_unze )) = c.preis_pro_unze then c.preis_pro_unze
end as minpreis
FROM "prv24" as a ,
"prv24" as b,
"prv24" as c
WHERE
a.IRI_KEY = b.IRI_KEY = c.IRI_KEY AND
a.week = b.week = c.week AND
(a.UPC_DESC != b.UPC_DESC or
a.UPC_DESC != c.UPC_DES OR
b.UPC_DESC != c.UPC_DESC)
Однако, вы можете обнаружить, что это имеет смысл намного больше смысла, если вы используете явный синтаксис объединения и используете значимый псевдонимы. Явные объединения позволяют избежать проблем, с которыми вы только что столкнулись (условие ИЛИ портит ваши объединения), и облегчают чтение вашего кода.
Вот гораздо более точная версия:
Select a.UPC_DESC,
a.IRI_KEY,
a.WEEK,
a.Price_per_unit,
a.Preis_pro_unze,
b.UPC_DESC,
b.IRI_KEY,
b.WEEK,
b.Price_per_unit,
b.Preis_pro_unze,
c.UPC_DESC,
c.IRI_KEY ,
c.WEEK ,
c.Price_per_unit,
c.Preis_pro_unze,
case
when min(min(a.preis_pro_unze , b.preis_pro_unze , c.preis_pro_unze )) = a.preis_pro_unze then a.preis_pro_unze
when min(min(a.preis_pro_unze , b.preis_pro_unze , c.preis_pro_unze )) = b.preis_pro_unze then b.preis_pro_unze
when min(min(a.preis_pro_unze , b.preis_pro_unze , c.preis_pro_unze )) = c.preis_pro_unze then c.preis_pro_unze
end as minpreis
FROM "prv24" as a
inner join "prv24" as b
on a.IRI_KEY = b.IRI_KEY
and a.week = b.week
inner join "prv24" as c
on a.IRI_KEY = c.IRI_KEY
and a.week = c.week
WHERE
(a.UPC_DESC != b.UPC_DESC or
a.UPC_DESC != c.UPC_DES or
b.UPC_DESC != c.UPC_DESC)