Так что у меня есть таблица под названием манекен, который выглядит какКак обновить столбец каждой строки в таблице SQL со значением этого столбца из другой конкретной строки в той же таблице
A | B | C | D | E
------------------
1 | 2 | 3 | 4 | u1
1 | 2 | 4 | 3 | u2
1 | 2 | 4 | 3 | u3
Я решил что каждая строка должна иметь одинаковый столбец C
WHERE E = u1
. Так что я бы в конечном итоге с:
A | B | C | D | E
------------------
1 | 2 | 3 | 4 | u1
1 | 2 | 3 | 3 | u2
1 | 2 | 3 | 3 | u3
Для этого я побежал следующий запрос:
update tb1
set tb1.C = tb2.C
from dummy as tb1, dummy as tb2
where tb2.E = 'u1'
Мне просто интересно, если это лучший способ сделать что-то вроде этого в SQL Server.
Вы можете использовать явное JOIN, но это простой запрос оно не нужно оптимизировать. – Mihai
Мы надеемся, что двигатель будет достаточно умным, чтобы ограничить результаты tb2 до того, как он выполнит соединение, что может привести к большому картезианскому продукту. Если это не так, то выполнение внутреннего соединения и ограничение лимита E на объединении могут быть более эффективными. но тестирование должно быть сделано, чтобы знать. На самом деле это зависит от изменений в версии базы данных о том, как движок будет обрабатывать это. Большой вопрос. Я думал о подвыборе, но делать это для каждой строки может быть хуже. Опять же, только способ узнать - это тестирование. Попробуйте все 3 метода и посмотрите планы выполнения! – xQbert
Еще один элемент, чтобы узнать, имеет ли C разные значения для одного и того же значения E, тогда ваш запрос не будет работать. поскольку tb2 вернет несколько значений. Все три ответа, опубликованные до сих пор, предоставляют вам значение C, которое может быть не таким, каким вы хотите. Если вы знаете, что у вас есть только 1 значение E, то u1, то это не проблема. Однако, если у вас несколько вариантов, решение будет терпеть неудачу, и три опубликованных ответа либо предоставят вам максимум C, либо случайное значение C. – xQbert