Если входное имя найдено в SQL, тогда сделайте еще ... с запросом SQL

0

Я пытаюсь написать SQL-запрос, который будет проверять в таблице "лица в столбце" rName для имени "jack", и если он существует, то UPDATE, эта строка else ВСТАВЛЯЕТ новую строку с новым именем rName.

Iv тестировал утверждения IF/ELSE, но не видел, как они работают. Или есть лучший способ делать то, что я хочу, без If/ELSE? (Я не делал большую часть этой работы SQL, я использовал только UPDATE, INSERT, DELETE, ALTER... что-то вроде этого.

У меня это до сих пор: (если гнездо найдено в строке rName, затем UPDATE, иначе INSERT новая строка)

SELECT * FROM persons IF 'jack' == rName BEGIN [UPDATE Statement] END ELSE BEGIN [ INSERT Statement] END

Изменить: я не думаю, что я объяснил, что я хотел, rName должны быть уникальными именами, 2 не должны совпадать. Iv попытался включить DUPLICATE KEY UPDATE, но, похоже, просто вставляет новую строку с новыми данными. Но я хочу, чтобы он обновил уже существующую строку rName (jack) с новыми данными, имя rName (jack) должно оставаться неизменным, но другие поля в этой строке должны быть обновлены до новых предоставленных данных.

Теги:
if-statement

4 ответа

1
Лучший ответ

В вашем случае:

INSERT INTO persons(`rName`, `foo`) VALUES('jack', 'bar') ON DUPLICATE KEY UPDATE `foo` = VALUES(`bar`);

rName должен иметь уникальный ключ для работы. Если в таблице есть "гнездо", оно обновляет поле foo "баром", а если нет "гнезда", он вставляет новую строку с rName= 'jack' и foo= 'бар'.

  • 0
    Все имена rName должны быть уникальными, никакие 2 не должны быть одинаковыми. Я пробовал это, но, кажется, просто вставляет новую строку с новыми данными. Но я хочу, чтобы он загружал уже существующую строку rName (jack) с новыми данными, rName (jack) должен остаться прежним, но другие поля в этой строке должны быть обновлены.
  • 0
    Вы уверены, что вы установили уникальный индекс для столбца rName? Потому что запрос делает именно то, что вы описали.
Показать ещё 1 комментарий
2

Я вижу, что вы используете mysql. Вам нужен синтаксис mysql insert ... on duplicate key update. Документация

1

Проблема, с которой вы сталкиваетесь с ON DUPLICATE KEY UPDATE, заключается в том, что столбец Name не имеет уникального ограничения, поэтому по определению таблицы вы допускаете дубликаты.

0

Смотрите также: http://dev.mysql.com/doc/refman/5.0/en/replace.html

Вы можете сделать

REPLACE INTO persons(`rName`, `foo`) VALUES('jack', 'bar')

Хотя технически, если конфликтующая строка уже существует, она удаляется и заменяется, а не обновляется. Но это может быть то, что вы хотели в любом случае.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню