MySQL Вставить, где запрос - PullRequest
104 голосов
/ 27 января 2009

Что не так с этим запросом:

INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

Работает без предложения WHERE. Кажется, я забыл свой SQL ..

Ответы [ 25 ]

1 голос
/ 06 августа 2012

Если вы указываете конкретную запись no для вставки данных, лучше использовать оператор UPDATE вместо оператора INSERT.

Этот тип запроса, который вы написали в вопросе, похож на фиктивный запрос.

Ваш запрос: -

INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

Здесь вы указываете id = 1, поэтому лучше использовать оператор UPDATE для обновления существующей записи. Не рекомендуется использовать предложение WHERE в случае INSERT. Вам следует использовать UPDATE .

Теперь с помощью запроса на обновление: -

UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
1 голос
/ 14 января 2012

После предложения WHERE вы ставите условие, и оно используется либо для извлечения данных, либо для обновления строки. Когда вы вставляете данные, предполагается, что строка не существует.

Итак, вопрос в том, есть ли строка с идентификатором 1? если это так, используйте MySQL UPDATE , в противном случае используйте MySQL INSERT .

1 голос
/ 07 декабря 2011

Самый простой способ - использовать IF, чтобы нарушить ключевое ограничение. Это работает только для INSERT IGNORE, но позволит вам использовать ограничение в INSERT.

INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');
1 голос
/ 10 августа 2012

все неправильно. У INSERT QUERY нет предложения WHERE, оно есть только у UPDATE QUERY. Если вы хотите добавить данные, где id = 1, тогда ваш запрос будет

UPDATE Users SET weight=160, desiredWeight= 145 WHERE id = 1;
1 голос
/ 15 января 2011

Это зависит от ситуации, в которой INSERT может иметь предложение where.

Например, если вы сопоставляете значения из формы.

Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com

Имеет смысл, не так ли?

1 голос
/ 21 апреля 2017

Я знаю, что это старый пост, но я надеюсь, что это все равно кому-то поможет, и я надеюсь, что это простой пример:

фон:

У меня было много-много случаев: один и тот же пользователь указан в списке несколько раз с несколькими значениями, и я хотел создать новую запись, поэтому ОБНОВЛЕНИЕ не имело бы смысла в моем случае, и мне нужно было обращаться к конкретному пользователю так же, как Я бы сделал, используя предложение WHERE.

INSERT into MyTable(aUser,aCar)
value(User123,Mini)

Используя эту конструкцию, вы фактически нацеливаетесь на конкретного пользователя (user123, у которого есть другие записи), поэтому вам, на мой взгляд, не нужно предложение where.

вывод может быть:

aUser   aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
1 голос
/ 21 ноября 2013

Вы можете сделать условную вставку на основе пользовательского ввода. Этот запрос будет вставлен, только если входные переменные '$ userWeight' и '$ userDesiredWeight' не пустые

INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'  
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
1 голос
/ 11 августа 2012

Я думаю, что ваш лучший вариант - использовать REPLACE вместо INSERT

ЗАМЕНА НА ПОЛЬЗОВАТЕЛЕЙ (идентификатор, вес, желаемый вес) ЗНАЧЕНИЯ (1, 160, 145);

1 голос
/ 11 августа 2012

Вы не должны использовать условие where в операторе вставки. Если вы хотите это сделать, используйте вставку в операторе обновления, а затем обновите существующую запись.

На самом деле я могу знать, зачем вам нужен оператор where в операторе вставки ??

Возможно, по той причине, что я мог бы предложить вам лучший вариант.

1 голос
/ 11 августа 2012

Нет. Насколько мне известно, вы не можете добавить предложение WHERE в этот запрос. Возможно, я тоже забыл свой SQL, потому что я не совсем уверен, зачем он вам нужен.

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