Существует множество способов обработки того, что подзапрос возвращает более одной строки.Проблема, которую необходимо решить, - это если подзапрос, возвращающий несколько значений, является правильным, или если он должен когда-либо возвращать только одну строку.Оператор равенства для подзапроса ожидает, что будет возвращена только одна строка / запись.
Кроме того, MONTHS_BETWEEN возвращает месяцев между двумя датами.Если вы хотите увидеть количество дней, используйте b.activity - SYSDATE > 30
или наоборот, если это необходимо.
Если допустимо более одной строки -
Предложение IN
Естьнет необходимости во втором соединении в подзапросе к таблице VERSION:
UPDATE VERSION
SET isActive = 0
WHERE customerNo IN (SELECT c.customerno
FROM Activity b
WHERE b.VersionNo = VERSION.VersionNo
AND MONTHS_BETWEEN(SYSDATE, b.activity) > 30);
Псевдоним таблицы VERSION относится к обновляемой таблице.
Предложение EXISTS
UPDATE VERSION
SET isActive = 0
WHERE EXISTS(SELECT NULL
FROM ACTIVITY a
WHERE VERSION.customerno = a.customerno
AND VERSION.versionno = a.versionno
AND MONTHS_BETWEEN(SYSDATE, b.activity) > 30);
Может быть только один?
Если должна быть возвращена только одна строка, может быть рассмотрена соответствующая агрегатная функция (MIN, MAX).