Jest to zwykle spowodowane duplikatami w zapytaniu określonym w klauzuli USING. To prawdopodobnie oznacza, że TABLE_A jest tabelą nadrzędną i ten sam ROWID jest zwracany kilka razy.
Możesz szybko rozwiązać problem, używając w zapytaniu DISTINCT (w rzeczywistości, jeśli „Y” jest stałą wartością, nie musisz nawet umieszczać jej w zapytaniu).
Zakładając, że twoje zapytanie jest poprawne (nie znasz swoich tabel), możesz zrobić coś takiego:
MERGE INTO table_1 a
USING
(SELECT distinct ta.ROWID row_id
FROM table_1 a ,table_2 b ,table_3 c
WHERE a.mbr = c.mbr
AND b.head = c.head
AND b.type_of_action <> '6') src
ON ( a.ROWID = src.row_id )
WHEN MATCHED THEN UPDATE SET in_correct = 'Y';