chaoz Δημοσ. 30 Αυγούστου 2007 Δημοσ. 30 Αυγούστου 2007 Γεια χαρά σε όλους Έχω το παρακάτω ερώτημα αλλα δεν δουλεύει. INSERT INTO Table (ID,Country,City) VALUES ((SELECT max(ID) + 1 from Table),'Greece','Αthens') Όλα παίζουν μέσω ASP Εγω έχω έναν πίνακα με 3 στήλες. Θελώ να περνάω στην βάση ID, Χώρα, Πόλη αλλά αφού "μάθω" το μεγαλύερο ID. Καμεία βοήθεια;
xpapias Δημοσ. 30 Αυγούστου 2007 Δημοσ. 30 Αυγούστου 2007 Γεια χαρά σε όλουςΈχω το παρακάτω ερώτημα αλλα δεν δουλεύει. INSERT INTO Table (ID,Country,City) VALUES ((SELECT max(ID) + 1 from Table),'Greece','Αthens') Όλα παίζουν μέσω ASP Εγω έχω έναν πίνακα με 3 στήλες. Θελώ να περνάω στην βάση ID, Χώρα, Πόλη αλλά αφού "μάθω" το μεγαλύερο ID. Καμεία βοήθεια; Xωρίς να γνωρίζω και πολλά από SQL - μήπως να το έκανες: INSERT INTO Table (ID,Country,City) VALUES (((SELECT max(ID) from Table)+1),'Greece','Αthens');
Επισκέπτης Δημοσ. 30 Αυγούστου 2007 Δημοσ. 30 Αυγούστου 2007 etsi opws fainetai ayto poy xreiazese einia apla to pedio toy id na einai autoincrement k oxi na kaneis oloklhrh diadikasia SELECT max(ID) + 1 from Table ( ektos ean ta Table poy anafereis einai diaforetika )
alex2005 Δημοσ. 30 Αυγούστου 2007 Δημοσ. 30 Αυγούστου 2007 Ασχολήθηκα λίγο με το πρόβλημά σου και δυστηχώς δεν μπορώ να βρω λύση με ένα μόνο ερώτημα.Η δικιά μου λύση (που δουλεύει) είναι η εξής: > INSERT INTO MyTable ( ID ) SELECT max(ID)+1 FROM MyTable; UPDATE MyTable SET Country = "Greece", City = "Athens" WHERE ID=(Select max(ID) from MyTable); Αλλά επειδή δεν υποστηρίζω ότι έχω τρελές γνώσεις από SQL περίμενε και για καμία άλλη απάντηση.
xpapias Δημοσ. 30 Αυγούστου 2007 Δημοσ. 30 Αυγούστου 2007 Νομίζω όμως ότι αν σβήσεις την τελευταία εγγραφή (πχ έστω ότι ήταν η 10η) το auto increment θα σου δώσει το id της + 1 δηλαδή 11 αντί για 10.
dks_1979 Δημοσ. 30 Αυγούστου 2007 Δημοσ. 30 Αυγούστου 2007 Κι αν σβήσεις το 6 πάλι κενό θα έχεις. Δεν έχει σημασία αν υπάρχουν κενά, το ζητούμενο είναι να είναι μοναδική η αρίθμηση. Ο καλύτερος τρόπος είναι auto increment (δεν ξέρω σε τι βάση αναφέρεσαι, αλλά όπως υλοποιείται εκεί). Αν δεν θέλεις αυτό, μπορείς να τρέξεις το select max(ID)+1 from table, να το αποθηκεύσεις σε μια μεταβλητή και μετά να τρέξεις το insert.
Bspus Δημοσ. 31 Αυγούστου 2007 Δημοσ. 31 Αυγούστου 2007 Συμφωνω οτι ειναι καλυτερα να φτιαξεις sequence και αντι για το select να κανεις sequence_name.nextval στη θεση του στο insert Παρολα αυτα, ο τροπος σου ειναι και αυτος σωστος και θα επρεπε να δουλευει. Μολις τωρα το δοκιμασα και δουλεψε αψογα Βεβαιωσου οτι το id ειναι αριθμος και οχι χαρακτηρας Επισης βεβαιωσου οτι στον πινακα υπαρχουν ηδη εγγραφες. Αν δεν υπαρχουν δεν θα δουλεψει ετσι οπως ειναι Αν παλι δεν δουλευει, δεν ξερω. Ισως το ΣΔΒΔ που εχεις να μην το υποστηριζει. Σε oracle 10g το δοκιμασα και δουλεψε ετσι insert into table1 values ( (select nvl(max(id) + 1,1) from table1), 'Greece', 'Athens') Δεν χρειαζεται να αναφερεις τα πεδια στο ινσερτ πριν τα Values εκτος αν θες να τους αλλαξεις τη σειρα. Δοκιμασε το και ετσι. Το nvl(max(id) + 1,1) ειναι για την περιπτωση που δεν υπαρχουν εγγραφες στον πινακα. Επειδη το max(id) επιστρεφει null (και κατ'επεκταση null + 1 = null) του λες αμα δει null να επιστρεψει 1
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.