MySQL Insert Где запрос

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

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

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

Ответ 1

MySQL Синтаксис INSERT не поддерживает предложение WHERE, поэтому ваш запрос в его состоянии потерпит неудачу. Предполагая, что ваш столбец id является уникальным или первичным ключом:

Если вы пытаетесь вставить новую строку с идентификатором 1, вы должны использовать:

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

Если вы пытаетесь изменить вес/желаемые значения для существующей строки с идентификатором 1, вы должны использовать:

UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;

Если вы хотите, вы также можете использовать INSERT.. ON DUPLICATE KEY синтаксис так:

INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145

ИЛИ даже так:

INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145

Также важно отметить, что если ваш столбец id является столбцом автоинкремента, вы можете также опустить его из своего INSERT вместе и позволить mysql увеличивать его как обычно.

Ответ 2

Вы не можете объединить предложение WHERE с предложением VALUES. Насколько мне известно, у вас есть два варианта -

  • INSERT, определяющий значения

    INSERT INTO Users(weight, desiredWeight) 
    VALUES (160,145)
    
  • INSERT с использованием оператора SELECT

    INSERT INTO Users(weight, desiredWeight) 
    SELECT weight, desiredWeight 
    FROM AnotherTable 
    WHERE id = 1
    

Ответ 3

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

Оператор OP стал бы тогда;

ОБНОВЛЕНИЕ Пользователь установил вес = 160, требуемый вес = 45, где id = 1;

В MySQL, если вы хотите INSERT или UPDATE, вы можете использовать запрос REPLACE с предложением WHERE. Если ГДЕ не существует, он ВСТАВЛЯЕТ, в противном случае он ОБНОВЛЯЕТ.

РЕДАКТИРОВАТЬ

Я думаю, что точка зрения Билла Карвина достаточно важна, чтобы извлечь из комментариев и сделать это очень очевидным. Благодаря Биллу, прошло слишком много времени с тех пор, как я работал с MySQL, я вспомнил, что у меня были проблемы с REPLACE, но я забыл, что они были. Я должен был это посмотреть.

Это не так, как работает MySQL REPLACE. Он выполняет УДАЛЕНИЕ (которое может быть неактивным, если строка не существует), за которым следует ВСТАВКА. Подумайте о последствиях виз. триггеры и зависимости внешнего ключа. Вместо этого используйте INSERT... ON DUPLICATE KEY UPDATE.

Ответ 4

Я не верю, что вставка имеет предложение WHERE.

Ответ 5

Вставить запрос не поддерживается, где ключевое слово *

Условия применяются, потому что вы можете использовать условия для операторов подвыбора. Вы можете выполнять сложные вставки с помощью подвыборов.

Например:

INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';

Поместив "select" в инструкцию insert, вы можете быстро выполнить вставки в мультиплекса.

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

SELECT count(*)
FROM customers
WHERE city = 'Newark';

Вы можете убедиться, что вы не вставляете повторяющуюся информацию, используя условие EXISTS.

Например, если у вас была таблица с именами клиентов с первичным ключом client_id, вы можете использовать следующую инструкцию:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

Этот оператор вставляет несколько записей с подзапросом.

Если вы хотите вставить одну запись, вы можете использовать следующую инструкцию:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);

Использование двойной таблицы позволяет вводить ваши значения в инструкции select, даже если значения в настоящее время не хранятся в таблице.

См. также Как вставить предложение where

Ответ 6

Правильный ответ на этот вопрос будет следующим:

а). ЕСЛИ хотите выбрать перед вставкой:

INSERT INTO Users( weight, desiredWeight ) 
  select val1 , val2  from tableXShoulatNotBeUsers
  WHERE somecondition;

б). IF-запись уже существует, используется обновление вместо вставки:

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

Должно быть

Update Users set weight=160, desiredWeight=145  WHERE id = 1;

с). Если вы хотите обновить или вставить одновременно

Replace Users set weight=160, desiredWeight=145  WHERE id = 1;

Note):- you should provide values to all fields else missed field in query 
        will be set to null

г). Если вы хотите CLONE запись из таблицы SAME, просто помните, что вы не можете выбрать    из таблицы, в которую вы вставляете, поэтому

 create temporary table xtable ( weight int(11), desiredWeight int(11) ;

 insert into xtable (weight, desiredWeight) 
    select weight, desiredWeight from Users where [condition]

 insert into Users (weight, desiredWeight) 
    select weight , desiredWeight from xtable;

Я думаю, что это довольно охватывает большинство сценариев

Ответ 7

Вы просто не можете использовать WHERE при выполнении инструкции INSERT:

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

должен быть:

 INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );

Часть WHERE работает только в операторах SELECT:

SELECT from Users WHERE id = 1;

или в операторах UPDATE:

UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;

Ответ 8

Вставить в = Добавление строк в таблицу

Upate = обновление определенных строк.

Что будет описывать предложение where в вашей вставке? Он не имеет ничего, чтобы соответствовать, строка не существует (пока)...

Ответ 9

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

INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'  
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';

Ответ 10

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

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

Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,[email protected],160,145) WHERE name != fred AND email != [email protected]

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

Ответ 11

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

INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');

Ответ 12

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

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

Ответ 13

Если вы указываете конкретную запись 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;

Ответ 14

Может ли WHERE-предложение действительно использоваться с INSERT-INTO-VALUES в любом случай?

Ответ окончательно нет.

Добавление предложения WHERE после INSERT INTO... VALUES... является просто недопустимым SQL и не будет анализировать.

Ошибка, возвращаемая MySQL:

mysql> INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1' at line 1

Наиболее важной частью сообщения об ошибке является

... syntax to use near 'WHERE id = 1' ...

который показывает определенную часть, которую парсер не ожидал найти здесь: предложение WHERE.

Ответ 15

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

UPDATE Users SET weight=160, desiredWeight= 145 WHERE id = 1;

Ответ 16

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

Ответ 17

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

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

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

Ответ 18

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

ЗАМЕНИТЬ INTO Пользователи (id, weight, wishWeight) VALUES (1, 160, 145);

Ответ 19

ПРОЧИТАЙТЕ ЭТО КАК ХОРОШО

Это не имеет смысла... даже буквально

INSERT означает добавление new row, и когда вы говорите WHERE, вы определяете, о какой строке вы говорите в SQL.

Таким образом, добавление новой строки невозможно с условием для существующей строки.

Вам нужно выбрать один из следующих вариантов:

а. Используйте UPDATE вместо INSERT

В. Используйте INSERT и удаляйте предложение WHERE (я просто говорю это...), или если вы действительно используете INSERT и WHERE в одном выражении, это можно сделать только через Предложение INSERT..SELECT...

INSERT INTO Users( weight, desiredWeight ) 
SELECT FROM Users WHERE id = 1;

Но это служит совершенно другой цели, и если вы определили id как первичный ключ, эта вставка будет сбой, иначе новая строка будет вставлена ​​с id = 1.

Ответ 20

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

фон:

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

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

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

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

aUser   aCar
user123 mini
user123 HisOtherCarThatWasThereBefore

Ответ 21

Способ использовать INSERT и ГДЕ

INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953); В этом случае это как существующий тест. Нет исключения, если вы запустите его два или более раз...

Ответ 22

правильный синтаксис для вставки mysql в оператор с использованием метода post:

$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";

Ответ 23

Я не думаю, что мы можем использовать предложение where в инструкции insert

Ответ 24

INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'  
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';

Ответ 25

Вы не можете использовать INSERT и WHERE вместе. Вы можете использовать предложение UPDATE для добавления значения в конкретный столбец в определенном поле, например, ниже кода;

UPDATE Users
SET weight='160',desiredWeight ='145'  
WHERE id =1

Ответ 26

Я думаю, что правильная форма для вставки значения в указанную строку:

UPDATE table SET column = value WHERE columnid = 1

это работает и похоже, если вы пишете на Microsoft SQL Server

INSERT INTO table(column) VALUES (130) WHERE id = 1;

на MySQL вы должны обновить таблицу.