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'.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.