Если входное имя найдено в SQL, тогда сделайте еще ... с запросом SQL - PullRequest
0 голосов
/ 01 декабря 2009

Я пытаюсь написать SQL-запрос, который проверит в таблице «people» в столбце «rName», скажем, имя «jack», и если он существует, тогда ОБНОВИТЕ эту строку, ВСТАВЬТЕ новую строку с новым rName.

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

Пока у меня есть это: (если jack найден в строке rName, тогда ОБНОВИТЬ его, иначе ВСТАВИТЬ новую строку)

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

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

Ответы [ 4 ]

2 голосов
/ 01 декабря 2009

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

1 голос
/ 01 декабря 2009

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

1 голос
/ 01 декабря 2009

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

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

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

0 голосов
/ 03 декабря 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...