Wat is er mis met deze query:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Het werkt zonder de WHERE
clausule. 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 id
Column 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 id
Kolom 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 –
-
Invoegen Pecificeren waarden
INSERT INTO Users(weight, desiredWeight) VALUES (160,145)
-
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. strike>
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 UPDATE
gebruiken om het bestaande record bij te werken. Het wordt niet aanbevolen om de clausule WHERE
te 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
INSERT
Middelen Voeg een new row
en wanneer u zegt WHERE
u 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 UPDATE
in plaats van INSERT
b. Gebruik INSERT
en verwijder WHERE
Clausule (ik zeg het gewoon …) of als u echt gebonden bent om INSERT
en WHERE
in éé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);