MySQL-invoegquery werkt niet met waar clausule

Wat is er mis met deze query:

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

Het werkt zonder de WHEREclausule. Ik leek mijn SQL te vergeten.


Antwoord 1, Autoriteit 100%

Mysql Insert Syntax ondersteunt de waar clausule niet Uw vraag zoals het staat, zal falen. Veronderstellen van uw idColumn is unieke of primaire sleutel:

Als u een nieuwe rij probeert in te voegen met ID 1 moet u gebruiken:

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

Als u probeert het gewicht / de gewenste gewichtswaarden voor een bestaande rij met ID 1 te wijzigen, moet u gebruiken:

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

Als u wilt, kunt u ook invoeging gebruiken .. Op Duplicate Sleutel Syntaxis zoals SO:

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

of zelfs zoals SO:

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

Het is ook belangrijk op te merken dat als uw idKolom een ​​automatische increment-kolom is, dan kan u het net zo goed weglaten vanaf uw inzetstuks en laat MySQL het zo normaal verhogen.


Antwoord 2, Autoriteit 17%

U kunt een clausule met een waardenclausule niet combineren. U hebt twee opties voor zover ik weet –

  1. Invoegen Pecificeren waarden

    INSERT INTO Users(weight, desiredWeight) 
    VALUES (160,145)
    
  2. Invoegen met behulp van een Select-instructie

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

Antwoord 3, Autoriteit 8%

U gebruikt de waaronder clausule voor updatequery’s. Wanneer u invoegt, wordt ervan uitgegaan dat de rij niet bestaat.

De verklaring van de OP zou dan worden;

Update-gebruikers instellen Gewicht = 160, gew. Wijdt = 45 waar ID = 1;

In MySQL, als u wilt invoegen of updaten, kunt u de vervangende query gebruiken met een clausule. Als de waar niet bestaat, wordt het inzet, anders wordt het updates.

bewerken

Ik denk dat Bill Karwin het punt belangrijk genoeg is om uit de opmerkingen uit te trekken en het heel duidelijk te maken. Bedankt Bill, het is te lang geleden dat ik met MySQL heb gewerkt, ik herinnerde me dat ik problemen had met vervangen, maar ik was het vergeten wat ze waren. Ik had het moeten opzoeken.

Dat is niet hoe MySQL’s worden vervangen. Het doet een verwijdering (die een no-op kan zijn als de rij niet bestaat), gevolgd door een inzetstuk. Denk aan de gevolgen vis. triggers en buitenlandse sleutelafhankelijkheden. Gebruik in plaats daarvan insert … op dubbele toetsupdate.


Antwoord 4, Autoriteit 5%

Ik geloof niet dat het inzetstuk een clausule heeft.


Antwoord 5, Autoriteit 2%

Het juiste antwoord op deze vraag zal sth zoals dit zijn:

A). Als u wilt selecteren vóór invoegen:

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

b). Als Record al bestaat, gebruik de update in plaats van instelling:

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

moet

zijn

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

c). Als u tegelijkertijd wilt bijwerken of invoegen

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

D). Als u een record uit dezelfde tabel wilt klonen, onthoud u gewoon dat u niet kunt selecteren
van de tabel waarnaar u daarom invoegt

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;

Ik denk dat dit behoorlijk dekt het grootste deel van de scenario’s


Antwoord 6, Autoriteit 2%

Invoegen query ondersteunt niet wanneer trefwoord *

Voorwaarden zijn van toepassing omdat u kunt gebruiken waar voorwaarde voor subselectieverklaringen.
U kunt gecompliceerde inserts uitvoeren met behulp van sub-selects.

Bijvoorbeeld:

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

Door een “select” in de insert-instructie te plaatsen, kunt u snel multiples-inserts uitvoeren.

Bij dit type invoeging wilt u misschien controleren hoeveel rijen worden ingevoegd. U kunt het aantal rijen bepalen dat wordt ingevoegd door de volgende SQL-instructie uit te voeren voordat u het invoegen uitvoert.

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

U kunt ervoor zorgen dat u geen dubbele informatie invoert door de EXISTS-voorwaarde te gebruiken.

Als u bijvoorbeeld een tabel met de naam clients had met een primaire sleutel van client_id, zou u de volgende instructie kunnen gebruiken:

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);

Deze instructie voegt meerdere records in met een subselect.

Als u één record wilt invoegen, kunt u het volgende statement gebruiken:

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);

Het gebruik van de dubbele tabel stelt u in staat uw waarden in een select-statement in te voeren, ook al zijn de waarden momenteel niet opgeslagen in een tabel.

Zie ook Hoe invoegen met where-clausule


Antwoord 7, autoriteit 2%

Je kunt WHERE gewoon niet gebruiken bij het uitvoeren van een INSERT-statement:

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

zou moeten zijn:

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

Het WHERE-gedeelte werkt alleen in SELECT-instructies:

SELECT from Users WHERE id = 1;

of in UPDATE-instructies:

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

Antwoord 8

Invoegen in = Rijen toevoegen aan een tabel

Upate = update specifieke rijen.

Wat zou de waar-clausule in uw bijlage beschrijven?
Er is niets dat overeenkomt, de rij bestaat (nog) niet…


Antwoord 9

U kunt conditionele INSERT doen op basis van gebruikersinvoer.
Deze query wordt alleen ingevoegd als de invoervariabelen ‘$userWeight’ en ‘$userDesiredWeight’ niet leeg zijn

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

Antwoord 10

Een manier om INSERT en WHERE is te gebruiken

INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);
In dit geval is het als een bestaan-test. Er is geen uitzondering als je het twee of meer keer uitvoert…


Antwoord 11

Het hangt af van de situatie dat INSERT een waar-clausule kan hebben.

Bijvoorbeeld als u waarden uit een formulier vergelijkt.

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

Is logisch, nietwaar?


Antwoord 12

De eenvoudigste manier is om IF te gebruiken om uw sleutelbeperking te schenden. Dit werkt alleen voor INSERT IGNORE, maar stelt je in staat om constraint te gebruiken in een INSERT.

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

Antwoord 13

Na de WHERE-clausule plaats je een voorwaarde en deze wordt gebruikt voor het ophalen van gegevens of voor het bijwerken van een rij. Wanneer u gegevens invoegt, wordt aangenomen dat de rij niet bestaat.

Dus de vraag is, is er een rij waarvan de id 1 is? zo ja, gebruik dan MySQL UPDATE, gebruik anders MySQL INSERT.


Antwoord 14

Als u een bepaald recordnummer opgeeft voor het invoegen van gegevens, is het beter om de UPDATE-instructie te gebruiken in plaats van de INSERT-instructie.

Dit type zoekopdracht dat u in de vraag heeft geschreven, is als een dummy-query.

Uw vraag is:-

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

Hier specificeert u de id=1 , dus u kunt beter de instructie UPDATEgebruiken om het bestaande record bij te werken. Het wordt niet aanbevolen om de clausule WHEREte gebruiken in het geval van INSERT. Gebruik UPDATE.

Nu update-query gebruiken:-

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

Antwoord 15

Kan WHERE-clausule daadwerkelijk worden gebruikt met INSERT-INTO-VALUES in elke
geval?

Het antwoord is absoluut nee.

Het toevoegen van een WHERE-clausule na INSERT INTO … VALUES … is gewoon ongeldige SQL en kan niet worden geparseerd.

De door MySQL geretourneerde fout is:

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

Het belangrijkste deel van de foutmelding is

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

die het specifieke deel toont dat de parser hier niet verwachtte te vinden: de WHERE-clausule.


Antwoord 16

het is helemaal verkeerd. INSERT QUERY heeft geen WHERE-clausule, alleen UPDATE QUERY heeft deze. Als u gegevens wilt toevoegen Waar id = 1 dan is uw zoekopdracht

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

Antwoord 17

Nee. Voor zover ik weet kun je de WHERE-clausule niet toevoegen aan deze query. Misschien ben ik mijn SQL ook vergeten, omdat ik niet echt zeker weet waarom je het toch nodig hebt.


Antwoord 18

U mag de where-voorwaarde niet gebruiken in de opdracht Insert. Als u dat wilt, gebruikt u invoegen in een update-instructie en werkt u vervolgens een bestaand record bij.

Kan ik eigenlijk weten waarom je een waar-clausule in de opdracht Insert nodig hebt??

Misschien op basis van de reden die ik u een betere optie kan voorstellen.


Antwoord 19

Ik denk dat uw beste optie wordt gebruikt, vervang vervangen in plaats daarvan

Vervang in gebruikers (ID, gewicht, gewijvolle) waarden (1, 160, 145);


Antwoord 20

Lees dit ook

Het klopt niet … zelfs letterlijk

INSERTMiddelen Voeg een new rowen wanneer u zegt WHEREu definieert waar u het over hebt in de SQL.

Dus het toevoegen van een nieuwe rij is niet mogelijk met een voorwaarde op een bestaande rij.

U moet uit het volgende kiezen:

a. Gebruik UPDATEin plaats van INSERT

b. Gebruik INSERTen verwijder WHEREClausule (ik zeg het gewoon …) of als u echt gebonden bent om INSERTen WHEREin één enkele verklaring kan het alleen via Plaats … Selecteer Clausule

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

Maar dit dient een heel ander doel en als u ID als primaire sleutel hebt gedefinieerd, is dit inzetstuk falen, anders wordt een nieuwe rij ingevoegd met ID = 1.


Antwoord 21

Ik ben me ervan bewust dat dit een oude post is, maar ik hoop dat dit nog steeds iemand zal helpen, met wat ik hoop een eenvoudig voorbeeld is:

Achtergrond:

Ik had een vele tot vele gevallen: dezelfde gebruiker wordt meerdere keren vermeld met meerdere waarden en ik wilde een nieuw record maken, daarom zou de update in mijn geval niet logisch zijn en ik moest net als een bepaalde gebruiker in mijn geval Ik zou doen met behulp van een clausule.

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

Door deze constructie te gebruiken, richt je je eigenlijk op een specifieke gebruiker (gebruiker123, die andere records heeft), dus je hebt niet echt een waar-clausule nodig, denk ik.

de uitvoer zou kunnen zijn:

aUser   aCar
user123 mini
user123 HisOtherCarThatWasThereBefore

Antwoord 22

correcte syntax voor mysql insert in statement met gebruik van post methode is:

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

Antwoord 23

ik denk niet dat we de where-clausule in de insert-instructie kunnen gebruiken


Antwoord 24

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

Antwoord 25

Je kunt INSERT en WHERE niet samen gebruiken. U kunt de UPDATE-clausule gebruiken om waarde toe te voegen aan een bepaalde kolom in een bepaald veld, zoals onderstaande code;

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

Antwoord 26

Ik denk dat de juiste vorm om een waarde in een bepaalde rij in te voegen is:

UPDATE table SET column = value WHERE columnid = 1

het werkt, en is vergelijkbaar als je schrijft op Microsoft SQL Server

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

Op MySQL moet u de tabel bijwerken.


Antwoord 27

U kunt dat doen met de onderstaande code:

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition

Antwoord 28

Ik denk dat je het zo zou moeten doen, als je tabel wilt valideren om e-mail niet twee keer te gebruiken

Code:

INSERT INTO tablename(fullname,email) 
SELECT * FROM (SELECT 'fullnameValue' AS fullname_field,'emailValue' AS email_field) entry WHERE entry.email_field NOT IN (SELECT email FROM tablename);

Other episodes