Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Εισαγωγήη εγγραφών σε ένα πίνακα από άλλο πίνακα της ίδιας βάσης

Îåêßíçóå áðü ôï ìÝëïò berta. Τελευταία δημοσίευση από το μέλος imanos στις 06-08-2009, 10:58. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-08-2009, 18:54 52959

    Εισαγωγήη εγγραφών σε ένα πίνακα από άλλο πίνακα της ίδιας βάσης

    Έστω ότι έχουμε δύο πίνακες

    table1 με πεδία id, code, name, tel κ.λ.π.

    table2 με πεδία id, kodikos, onoma, perioxi κ.λ.π. 

    της ίδιας βάσης. Θέλουμε να εισάγουμε νέες εγγραφές στον table1 και να ενημερωθούν μόνο τα πεδία code, name  από τα πεδία kodikos, onoma του πίνακα table2 και μάλιστα όσα έχουν κωδικό μεγαλύτερο π.χ. από 5000. Το πεδίο id το ενημερώνω παίρνοντας το max(id) του πίνακα προσθέτοντας 1 ώστε μόλις προσθέτει μια έγγραφή το id αυτόματα να αυξάνει κατά 1.

    η εντολή SQL που γράφω είναι η εξής :

    Insert Into TABLE1 (TABLE1.id, TABLE1.code, TABLE1.name) As
            (Select max(TABLE1.id)+1, TABLE2.kodikos, TABLE2.onoma
                    From TABLE2
                            Where TABLE2.kodikos > '5000');

    αλλά μου βγάζει μήνυμα λάθους.

    Που ακριβώς κάνω το λάθος ;

    Ευχαριστώ εκ των προτέρων

     

  •  05-08-2009, 20:19 52961 σε απάντηση της 52959

    Απ: Εισαγωγήη εγγραφών σε ένα πίνακα από άλλο πίνακα της ίδιας βάσης

    ...αλλά μου βγάζει μήνυμα λάθους.

    Να το πούμε άλλη μια φορά μιας και είσαι νέος/νέα στο site. Tο παραπάνω δεν λέει τίποτα, πρέπει πάντοτε να αναφέρονται επακριβώς τα μηνύματα λαθών. Δεν είναι μεγάλος κόπος να κάνεις copy/paste το μήνυμα λάθους ε;

    Τώρα, μιας και δεν έχω το μήνυμα λάθους, υποθέτω ότι φταίει το max(TABLE1.id)+1 αφού από μόνο του μέσα στο SELECT δεν στέκει καθώς δεν αρκεί που αναφέρεται ο πίνακας TABLE1 στο INSERT. Κανονικά θα έπρεπε να πεις

    Select (SELECT max(TABLE1.id)+1 FROM TABLE1), TABLE2.kodikos, TABLE2.onoma
                    From TABLE2
                            Where TABLE2.kodikos > '5000'

    αλλά και πάλι θα έχεις πρόβλημα γιατί αυτό θα έχει ως αποτέλεσμα να παραχθεί το πρώτο πεδίο με ίδια τιμή για όλες τις εγγραφές, οπότε μετά θα χτυπάει πιθανότατα το κλειδί. Σε τί βάση (RDBMS, έκδοση, κλπ) δουλεύεις (άλλη μια πληροφορία που θα έπρεπε να αναφέρεις στην αρχή του μηνύματός σου);


    Vir prudens non contra ventum mingit
  •  06-08-2009, 08:06 52965 σε απάντηση της 52961

    Απ: Εισαγωγήη εγγραφών σε ένα πίνακα από άλλο πίνακα της ίδιας βάσης

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    USE myDataBase
    INSERT INTO
           myDataBase.schema.TableToInsertInto
      (
        Field1,
        Field2,
        Field3
      )
    SELECT tb.Fieldx1 + Y,	-- y =1
           tb.field2,
           tb.field3
    FROM   TableToInsertFrom tb
    WHERE  tb.Fieldx1 > 5000
    Κατι σαν και αυτο θες: (?)

     

    Δημοσίευση στην κατηγορία:
  •  06-08-2009, 10:58 52966 σε απάντηση της 52959

    Απ: Εισαγωγήη εγγραφών σε ένα πίνακα από άλλο πίνακα της ίδιας βάσης

    Ο manos σου απάντησε επακριβώς του τί πρέπει να κάνεις .Εγώ απλώς θα πρόσθετα ότι στόν πίνακα που θέλεις να κάνεις την εισαγωγή των νέων εγγραφών το πεδίο id να το ορίσεις σαν  AutoIncrement .Έτσι δεν χρειάζεται να χειριστής καθόλου αυτό το πεδίο στο insert statement σου και δέν θα έχεις πρόβλημα αν έχει οριστεί ότι το Πεδίο ID είναι το primary key του πίνακα σου .

    Το sql statement σου τώρα μπορεί να έχει όπως παρακάτω

    Insert into TABLE1 (code,name)

    select kodikos,onoma from TABLE2 where kodikos>5000

     

     


    Ιωάννης Μανουσάκης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems