Vinnaren i pepparkakshustävlingen!
2016-04-16, 15:07
  #1
Medlem
spyder123s avatar
Hej,

Försöker skriva en kod som lägger in en ny kund om kunden inte redan existerar (identifierat genom personnumret). Har försökt med denna kod, får ett felmeddelande på tredje raden. Förstår inte hur jag ska skriva...

Kod:
INSERT INTO customer (pid ,firstnamelastnamestreetziporttelemail
VALUES (1234'Kalle''Anka''Testgata 1''12345''Ankeborg''123456''kalle@anka.se'
WHERE NOT EXISTS (SELECT id FROM customer WHERE pid=1234

Ovan kod är ett exempel på vad som skulle vara indata, annars är det givetvis dynamiskt.

Vad gör jag för fel? Hur löser jag det? Suttit med detta ett bra tag, är inte jättehaj på SQL.
__________________
Senast redigerad av spyder123 2016-04-16 kl. 15:10.
Citera
2016-04-16, 15:14
  #2
Medlem
Lydans avatar
Din kolumn verkar heta pid och inte id? I ditt select-statement på tredje
Edit: man kanske får skriva så här i mysql, men mer korrekt torde vara att ha pid som unik, och få kan du inte stoppa in den oavsett
Edit 2: i MSSQL hade jag kollat på detta: http://stackoverflow.com/questions/1...nd-then-select.

Bör vara sql tror jag. Så mysql bör godkänna drt
__________________
Senast redigerad av Lydan 2016-04-16 kl. 15:18.
Citera
2016-04-16, 15:16
  #3
Medlem
Xer0s avatar
Du får inte göra where i insert.
Däremot kan du göra
Citat:
ON DUPLICATE KEY UPDATE
t.ex.

Ett annat alternativ är ju att först göra en select och kolla om användaren finns, och if not then gör en insert.
Citera
2016-04-16, 15:17
  #4
Medlem
spyder123s avatar
Citat:
Ursprungligen postat av Lydan
Din kolumn verkar heta pid och inte id? I ditt select-statement på tredje
Har en kolumn som heter ID också men som är autoökande så skickar inte in det. Testade att byta till pid utan någon skillnad. I för sig förstår jag inte det spelar någon roll vad jag selectar, vill bara hitta om pid redan finns...
Citera
2016-04-16, 15:19
  #5
Medlem
Lydans avatar
Citat:
Ursprungligen postat av spyder123
Har en kolumn som heter ID också men som är autoökande så skickar inte in det. Testade att byta till pid utan någon skillnad. I för sig förstår jag inte det spelar någon roll vad jag selectar, vill bara hitta om pid redan finns...

Kk, kolla min edit ovan. Tror länken visar vad du vill göra
Citera
2016-04-16, 15:23
  #6
Medlem
spyder123s avatar
Citat:
Ursprungligen postat av Xer0
Du får inte göra where i insert.
Däremot kan du göra t.ex.

Ett annat alternativ är ju att först göra en select och kolla om användaren finns, och if not then gör en insert.
Aah, tack det fungerade utmärkt. Har ett annat unik kolumn men om jag vill att personnumret ska vara unikt behöver jag ju inte en till ID-kolumn. Funkar utmärkt. Och då antar jag att jag bara kan säga att den ska uppdatera till redan inskickat värde, alltså att det blir oförändrat.


Citat:
Ursprungligen postat av Lydan
Kk, kolla min edit ovan. Tror länken visar vad du vill göra
Tack.
Citera
2016-04-27, 10:18
  #7
Medlem
kodsnickrarns avatar
Nej du kan inte villkora själva INSERT:en med ett WHERE-villkor, däremot kan du ju använda en SELECT istället för VALUES():

Kod:
INSERT INTO customer (pid ,firstname, lastname, street, zip, ort, tel, email)  
SELECT 1234, 'Kalle', 'Anka', 'Testgata 1', '12345', 'Ankeborg', '123456', 'kalle@anka.se'
WHERE NOT EXISTS (SELECT id FROM customer WHERE pid=1234)  


/K
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback