24. august 2006 - 23:30Der er
14 kommentarer og 1 løsning
Bruge "select max" istedet for auto_increment.
Hej alle
Hvordan omskriver jeg nedenstående SQL så den virker?
INSERT INTO products (productnumber) VALUES ((SELECT MAX(productnumber) FROM product)+1)
... eller få det til at fungere på en anden måde? Jeg kan ikke sætte auto_increment på 'productnumber', da der allerede er et ID felt i tabellen som har dette, og derudover må der også godt forekomme flere hits i databasen med samme 'productnumber'.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Burde der ikke stå products (med s) i både INSERT INTO og SELECT FROM, for jeg går ud fra, at der skal indsættes det nuv. højeste nr. + 1.? Bare en tanke... :-)
coderdk:> Som sagt kan der godt forekomme flere hits i databasen med samme produktnummer, derfor kan dette felt ikke angives som ID.
fsconsult.dk.> Perfekt. Takker... Sjovt at (1) virker, men ikke (2) gør: (1) INSERT INTO products (productnumber) (SELECT MAX(productnumber)+1 FROM products) (2) INSERT INTO products (productnumber) VALUES (SELECT MAX(productnumber)+1 FROM products)
... har desuden også prøvet: INSERT INTO product_unit_label (unit_id, language, label) VALUES (SELECT MAX(unit_id)+1 FROM product_unit_label, 1, 'stk')
--> fsconsult.dk: Jeg holder med arne. Det er ikke min erfaring, at man kan mixe VALUES og SELECT på den måde(#2). Du angiver jo også selv i 12:17:30, at der er de to syntaxes.
Altså det er min tro, at følgende er rigtigt
Tilladt: INSERT INTO tabel (felt1, felt2, felt3) VALUES(1, 300, 'Test') INSERT INTO tabel (felt1, felt2, felt3) SELECT felta, feltb, feltc FROM tabela
Ikke tilladt: INSERT INTO tabel (felt1, felt2, felt3) VALUES(1, (SELECT feltb FROM tabela WHERE ID=1), 'Test')
Det sidste kan naturligvis simuleres ved i stedet at skrive INSERT INTO tabel (felt1, felt2, felt3) SELECT 1, feltb, 'Test' FROM tabela WHERE ID=1
Hvis spørgeren derfor ønsker at oprette varer med flere felter angivet, vil jeg tro det skal gøres som:
INSERT INTO products (productnumber, description, price, producerid) SELECT (SELECT MAX(productnumber) + 1 FROM products), 'Hestebønner, 50 kg', 1332.45, 32 FROM products WHERE id=1
--> fsconsult.dk: Det vil da normalt kræve en GROUP BY 1, 'stk', og så ryger fidusen med dit MAX(unit_id).
Jeg tror som sagt, at det skal skrives INSERT INTO product_unit_label (unit_id, language, label) SELECT (MAX(unit_id)+1 FROM product_unit_label), 1, 'stk' FROM tabelmed1række
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.