Это мой запрос, и я точно знаю, в чем проблема. Он возвращает более одного столбца из своего внутреннего оператора select, пока он будет обновлять только один столбец. Точка - это второй столбец для условия. Как я могу достичь своей цели? Есть ли какой-либо конкретный синтаксис sql.Решение сложного подзапроса sql
update xaddress B set (B.xrank)=
(select a.x1001olcsrl,row_number() over(partition by a.x1001olcsrl order by a.x1001olcsrl) as rnk
from xaddress a)
where x1001olcsrl=B.x1001olcsrl
Это было бы проще [с помощью 'merge'] (http://stackoverflow.com/a/38790076/266304). Вы уверены, что хотите сохранить/сохранить этот рейтинг - почему бы не иметь представление оболочки, которое генерирует его на лету? –
Было бы проще, если бы вы объяснили, что вы связываете. Внутренний запрос не имеет смысла: выберите столбец и номер строки, где вы разбиваете и заказываете один и тот же столбец? что это должно делать? Что он делает, если нет дубликатов, он всегда будет возвращать 1; и если они есть, он вернет более одной строки для каждого дублированного значения x1001olcsrl, а ошибка (даже если вы используете MERGE, правильное решение) будет заключаться в том, что в подзапросе слишком много ROWS, а не слишком много столбцов. – mathguy
@alex Я согласен с вами, но это может быть выполнено каждое обновление, возможно, с помощью триггера, если решающее значение имеет решающее значение. – Bohemian