Προς το περιεχόμενο

SQL Insert into & Select Πρόβλημα


chaoz

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια χαρά σε όλους

 

Έχω το παρακάτω ερώτημα αλλα δεν δουλεύει.

 

INSERT INTO Table (ID,Country,City) VALUES ((SELECT max(ID) + 1 from Table),'Greece','Αthens')

 

Όλα παίζουν μέσω ASP

 

Εγω έχω έναν πίνακα με 3 στήλες. Θελώ να περνάω στην βάση ID, Χώρα, Πόλη αλλά αφού "μάθω" το μεγαλύερο ID.

 

Καμεία βοήθεια;

Δημοσ.
Γεια χαρά σε όλους

Έχω το παρακάτω ερώτημα αλλα δεν δουλεύει.

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');

Δημοσ.

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 )

Δημοσ.

Ασχολήθηκα λίγο με το πρόβλημά σου και δυστηχώς δεν μπορώ να βρω λύση με ένα μόνο ερώτημα.Η δικιά μου λύση (που δουλεύει) είναι η εξής:

 

>
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 περίμενε και για καμία άλλη απάντηση.

Δημοσ.

Νομίζω όμως ότι αν σβήσεις την τελευταία εγγραφή (πχ έστω ότι ήταν η 10η) το auto increment θα σου δώσει το id της + 1 δηλαδή 11 αντί για 10.

Δημοσ.

Κι αν σβήσεις το 6 πάλι κενό θα έχεις. Δεν έχει σημασία αν υπάρχουν κενά, το ζητούμενο είναι να είναι μοναδική η αρίθμηση.

 

Ο καλύτερος τρόπος είναι auto increment (δεν ξέρω σε τι βάση αναφέρεσαι, αλλά όπως υλοποιείται εκεί).

 

Αν δεν θέλεις αυτό, μπορείς να τρέξεις το select max(ID)+1 from table, να το αποθηκεύσεις σε μια μεταβλητή και μετά να τρέξεις το insert.

Δημοσ.

Συμφωνω οτι ειναι καλυτερα να φτιαξεις 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

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...