Sql

Sql update нескольких полей: mysql — SQL Обновление нескольких строк одним запросом

php — UPDATE нескольких строк одного поля — MySQL

Задать вопрос

Вопрос задан

Изменён 3 года 2 месяца назад

Просмотрен 425 раз

Есть таблица table в БД, где два поля у них — две записи:

   id  field1 field2
     1    asc     1
     2    desc    0

имеется HTML тег select с выбором двух полей:

<select name="filter">
    <option value="asc">возрастание</option>
    <option value="desc">уменьшение</option>
    </select>

Как у field2 сделать UPDATE, чтобы постоянно были 0 и 1 в зависимости от выбора select на форме? Например, если выбран «возрастание», то в БД asc = 1, desc = 0 и наоборот

  • php
  • mysql

2

можно в таблицу добавить тригеры на обновление и инсерт

CREATE  TRIGGER `tr_upd` BEFORE UPDATE ON `table` FOR EACH ROW BEGIN
 IF( NEW. field1 == 'asc') THEN
 SET NEW.field2 = 1;
 ELSE
 SET NEW.field2 = 0;
 END IF;
 END;

2

Тут можно использовать обычный SQL-запрос, советую пользоваться MySQLi-драйвером, читайте док-ию. сам запрос и псевдо-код:

если выбран OPTION1 (Возрастание):
UPDATE `table` SET asc = 1, desc = 0;
если выбран OPTION2 (Убывание):
UPDATE `table` SET asc = 0, desc = 1;

9

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Оператор SQL UPDATE: примеры, синтаксис

Оператор SQL UPDATE используется для изменения значений в записях таблицы.

Оператор SQL UPDATE имеет следующий синтаксис:

UPDATE table_name SET expression [WHERE condition]

Напоминаю, что записи в квадратных скобках [] являются необязательными.

После ключевого слова SET должен идти список столбцов таблицы, которые следует изменить, и новые значения в формате Имя_столбца = значение.

Дополнительное условие, описываемое в операторе SQL WHERE, помогает более гибко совершать манипуляции данными.


Примеры оператора SQL UPDATEИмеется следующая таблица Planets:

IDPlanetNameRadiusSunSeasonOpeningYearHavingRingsOpener
1Mars33966871659NoChristiaan Huygens
2Saturn6026810759. 22Yes
3Neptune24764601901846YesJohn Couch Adams
4Mercury2439115.881631NoNicolaus Copernicus
5Venus60512431610NoGalileo Galilei

Пример 1. С помощью оператора SQL UPDATE изменить название планеты Neptune на Pluton:

UPDATE Planets
SET PlanetName = 'Pluton'
WHERE ID = 3

В этом примере условие оператора SQL WHERE является обязательным, так как без него все поля столбца PlanetName во всей таблице изменились бы на Pluton. В данном случае, нам приходит на помощь столбец ID, ибо он является Первичным ключом, позволяющим однозначно идентифицировать запись.

Выполним запрос оператором SQL SELECT, чтобы посмотреть изменения в записи:

SELECT *
FROM Planets
WHERE ID = 3

Результат:

IDPlanetNameRadiusSunSeasonOpeningYearHavingRingsOpener
3Pluton24764601901846YesJohn Couch Adams

Пример 2.  С помощью оператора SQL UPDATE у первых трех записей таблицы изменить значение наличия колец (HavingRings) на «No» и обнулить поле ID

Код примера для MS SQL Server:

UPDATE TOP(3) Planets
SET HavingRings = 'No', ID = NULL

Код примера для MySQL:

UPDATE Planets
SET HavingRings = 'No', ID = NULL
LIMIT 3

Выполним проверку:

SELECT TOP(3) *
FROM Planets

Результат:

IDPlanetNameRadiusSunSeasonOpeningYearHavingRingsOpener
NULLMars33966871659NoChristiaan Huygens
NULLSaturn6026810759.22No
NULLNeptune24764601901846NoJohn Couch Adams

sql — обновить несколько значений в одном выражении

Задать вопрос

спросил

Изменено 8 месяцев назад

Просмотрено 257 тысяч раз

У меня есть основная/подробная таблица, и я хочу обновить некоторые сводные значения в основной таблице по сравнению с подробной таблицей. Я знаю, что могу обновить их вот так:

 обновить MasterTbl, установить TotalX = (выбрать сумму (X) из DetailTbl, где DetailTbl.MasterID = MasterTbl.ID)
обновить MasterTbl, установить TotalY = (выбрать сумму (Y) из DetailTbl, где DetailTbl.MasterID = MasterTbl.ID)
обновить MasterTbl, установить TotalZ = (выбрать сумму (Z) из DetailTbl, где DetailTbl.MasterID = MasterTbl.ID)
 

Но я хотел бы сделать это в одном выражении, примерно так:

 update MasterTbl set TotalX = sum(DetailTbl.X), TotalY = sum(DetailTbl.Y), TotalZ = sum(DetailTbl.Z )
из DetailTbl
где DetailTbl.MasterID = группа MasterTbl.ID по MasterID
 

но это не работает. Я также пробовал версии, в которых отсутствует пункт «группировать по». Я не уверен, сталкиваюсь ли я с ограничениями моей конкретной базы данных (Advantage) или с ограничениями моего SQL. Вероятно, последнее. Кто-нибудь может помочь?

  • sql
  • сервер базы данных преимуществ

Попробуйте это:

 Обновление набора MasterTbl
    TotalX = Сумма (D.
X), TotalY = Сумма (DY), TotalZ = Сумма (D.Z) Из MasterTbl M Присоединиться к DetailTbl D На D.MasterID = M.MasterID

В зависимости от того, какую базу данных вы используете, если это не работает, попробуйте это (это нестандартный SQL, но допустимый в SQL Server):

 Обновление M Set
    TotalX = Сумма (D.X),
    TotalY = Сумма (DY),
    TotalZ = Сумма (D.Z)
 Из MasterTbl M Присоединиться к DetailTbl D
     На D.MasterID = M.MasterID
 

Как упоминалось в комментариях, если программное обеспечение вашей базы данных не позволяет использовать предложения From в обновлениях, вы должны использовать подход подзапроса, упомянутый в нескольких других ответах

4

Почему вы группируете оператор обновления? Вы уверены, что это не та часть, которая вызывает сбой запроса? Попробуйте это:

 обновление
    MasterTbl
поставил
    TotalX = Сумма(DetailTbl.X),
    TotalY = Сумма(DetailTbl.
Y), TotalZ = Сумма(DetailTbl.Z) из DetailTbl куда DetailTbl.MasterID = MasterID

4

В Oracle решение будет таким:

 ОБНОВЛЕНИЕ
    MasterTbl
ПОСТАВИЛ
    (ВсегоX, ВсегоY, ВсегоZ) =
      (ВЫБЕРИТЕ СУММУ (X), СУММУ (Y), СУММУ (Z)
         из DetailTbl, где DetailTbl.MasterID = MasterTbl.ID)
 

Не знаю, позволяет ли это ваша система.

1

Вы пробовали с подзапросом для каждого поля:

 ОБНОВЛЕНИЕ
    MasterTbl
ПОСТАВИЛ
    TotalX = (ВЫБРАТЬ СУММУ(X) из DetailTbl, где DetailTbl.MasterID = MasterTbl.ID),
    TotalY = (ВЫБРАТЬ СУММУ(Y) из DetailTbl, где DetailTbl.MasterID = MasterTbl.ID),
    TotalZ = (ВЫБРАТЬ СУММУ(Z) из DetailTbl, где DetailTbl.MasterID = MasterTbl.ID)
КУДА
    ....
 

1

Попробуйте это:

 обновить MasterTbl M,
       (выберите сумму (X) как sX,
               сумма(Y) как sY,
               сумма(Z) как sZ,
               MasterID
        из DetailTbl
        группа по MasterID) А
поставил
  M. TotalX=A.sX,
  M.TotalY=A.sY,
  M.TotalZ=A.sZ
куда
  M.ID=A.MasterID
 

Если ваша БД поддерживает это, объединение всех 3 обновлений в одну строку sql сэкономит время на обращение к серверу при запросе через локальную сеть. Так что, если ничего не работает, это может дать вам небольшое улучшение. Типичным разделителем нескольких операторов является точка с запятой, например:

 'обновить x....;обновить y...;обновить...z'
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

tsql — обновить несколько столбцов в SQL с привязанным составным идентификатором

Задать вопрос

спросил

Изменено 10 лет, 8 месяцев назад

Просмотрено 24к раз

Я пытаюсь обновить несколько столбцов в операторе MS SQL, используя подзапрос. Поиск привел меня к чему-то вроде:

 UPDATE table1
УСТАНОВИТЕ col1 = a.col1, col2 = a.col2, col3 = a.col3 ОТ
(ВЫБЕРИТЕ столбец1, столбец2, столбец3 из таблицы2, где <выражение>) КАК
ГДЕ table1.col1 <выражение>
 

http://geekswithblogs.net/phoenix/archive/2009/10/13/update-multiple-columns-on-sql-server.aspx

Моя проблема в том, что во внутреннем выражении WHERE мне нужна ссылка к определенному полю в таблице 1:

 ОБНОВЛЕНИЕ таблицы 1
УСТАНОВИТЕ col1 = a.col1, col2 = a.col2, col3 = a.col3 ОТ
(ВЫБЕРИТЕ col1, col2, col3 из table2, где table1.col0 = table2.col0) КАК
ГДЕ table1.col1 <выражение>
 

Когда я запускаю этот запрос, я получаю сообщение «Не удалось связать составной идентификатор «table1.col0». «. Очевидно, при использовании этого синтаксиса SQL не может связать текущую запись table1 в подзапросе. Прямо сейчас я повторяю подзапрос для каждого поля и использую синтаксис:

 ОБНОВЛЕНИЕ таблицы 1
SET col1 = (подзапрос), col2 = (подзапрос). ..
 

Но это выполняет подзапрос (что очень дорого) один раз для каждого столбца, чего я хотел бы избежать.

Есть идеи?

  • sql
  • tsql
  • sql-update

на сервере sql вы можете использовать предложение from в запросе на обновление. Присоединяйтесь к таблицам, как если бы вы выбрали. Обновляемая таблица должна быть включена в соединения.

 обновить таблицу_1
  установить поле_1 = таблица_2.значение_1
  из таблицы_1
    внутреннее соединение table_2
      на (table_1.id = table_2.id)
 

Или, если вам не нравится синтаксис объединения, это также будет работать:

 UPDATE table1
SET col1 = a.col1, col2 = a.col2, col3 = a.col3
ИЗ таблицы1, таблицы2 как
ГДЕ table1.col0 = a.col0
И table1.col1 <выражение>
 

Ваш автомобиль использует команду CROSS APPLY для обновления нескольких столбцов из подвыбора

 UPDATE t1
НАБОР t1.col1 = a.col1, t1.col2 = a.col2, t1.col3 = a.col3
ИЗ таблицы1 t1
ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ
(ВЫБЕРИТЕ col1, col2, col3 из table2, где table1.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *