Это может быть достигнуто с помощью CTE, оконной функции, подобной row_number()
, outer apply
, или просто с помощью производной таблицы, которая, вероятно, менее запутана для вас. Это то, что у вас изначально было, но вы забыли также вернуть столбец oggetto
из вашей производной таблицы, поэтому вы не смогли join
на ней получить ошибку.
update uo
set uo.trasco_oggetto_pratica = tqi.OGGETTO_PRATICA
from utilizzi_oggetto uo
inner join
(select
max(OGGETTO_PRATICA) OGGETTO_PRATICA,
OGGETTO
from trasco_quadri_imm
group by OGGETTO) tqi on
tqi.OGGETTO = uo.OGGETTO
Обычно это означает, что существуют несколько initWithSource:
имена методов на различных классах с конфликтующими типами аргумента. Помните, если переменная вводится как id
компилятор не знает, каково класс это. Таким образом, если Вы звоните initWithSource:
на id
- типизированный объект и несколько классов имеют initWithSource:
метод, компилятор по существу просто выбирает один из двух. Если это выбирает "неправильный", ну, в общем, Вы получаете "отличную ошибку" типа Objective C.
Итак, почему это происходит с Вами? Я не на 100% уверен, но помню это +[TBCTouchDelegate alloc]
возвраты id
. Таким образом объединение в цепочку вызовов alloc/init эквивалентно этому:
id o = [TBCTouchDelegate alloc];
touchDelegate = [o initWithSource:self];
Следовательно, Вы звоните initWithSource:
на id
- переменная определенного типа. Если существует конфликт initWithSource:
метод, Вы могли получить эту ошибку компилятора.
Существует ли конфликтующий метод? Я проверил систему и единственный конфликт, в котором каждый был NSAppleScript
:
- (id)initWithSource:(NSString *)source;
Теперь NSAppleScript
часть Основы, но я заметил, что это - код iPhone. Таким образом, возможно, Вы только получаете эту ошибку при компиляции для средства моделирования а не устройства?
В любом случае, если это - Ваша проблема, Вы могли бы обойти ее путем разделения alloc/init на две различных строки:
touchDelegate = [TBCTouchDelegate alloc];
touchDelegate = [touchDelegate initWithSource:self];
Теперь, Вы звоните initWithSource:
на полностью-переменной-определенного-типа (вместо id
- введенный), таким образом, компилятор больше не должен предполагать который выбрать. Или Вы могли бросить возврат из +alloc
:
touchDelegate = [(TBCTouchDelegate *)[TBCTouchDelegate alloc] initWithSource:self];
Другое решение состоит в том, чтобы переименовать initWithSource:
избегать конфликта и возможно делать это более описательным. Вы не говорите, чем в настоящее время называют класс, ни для чего "источник", таким образом, я не могу вывести возможности.