karabouzouk... Δημοσ. 15 Μαρτίου 2012 Δημοσ. 15 Μαρτίου 2012 Καλησπέρα παιδιά! Θέλω σε ένα πίνακα να προσθέσω την τιμή 'otinanai' αλλά μόνο αν αυτή δεν υπάρχει ήδη στον πίνακα.. Οι γνώσεις μου στην sql είναι λίγο ξεχασμένες οπότε αν μπορούσε να με βοηθήσει κάποιος και να μου πει τι κάνω λάθος θα ήταν ευχής έργο..! Δουλεύω στο MySql Workbench και όταν τρέχω το παρακάτω μου βγάζει "Error code 1064: You have an error in your sql syntax. ευχαριστώ >INSERT INTO Municipalities (municipality_name) VALUES('otinanai') WHERE NOT EXISTS (SELECT * FROM Municipalities WHERE municipality_name = 'otinanai')
macabre_sunsets Δημοσ. 15 Μαρτίου 2012 Δημοσ. 15 Μαρτίου 2012 Νομίζω πως για αλφαριθμητικά πρέπει να χρησιμοποιήσεις το LIKE αντί του "=". Επίσης, γιατί δεν κάνεις το πεδίο του πίνακα Unique, ώστε να μην μπορεί να μπει δυο (ή και παραπάνω) φορές το ίδιο περιεχόμενο;
bnvdarklord Δημοσ. 15 Μαρτίου 2012 Δημοσ. 15 Μαρτίου 2012 Νομίζω πως για αλφαριθμητικά πρέπει να χρησιμοποιήσεις το LIKE αντί του "=". Δεν ισχύει αυτό, το LIKE ειναι αν θες να χρησιμοποιήσεις wildcards
karabouzouk... Δημοσ. 15 Μαρτίου 2012 Μέλος Δημοσ. 15 Μαρτίου 2012 Ευχαριστώ και τους δύο που απαντήσατε! Νομίζω πως για αλφαριθμητικά πρέπει να χρησιμοποιήσεις το LIKE αντί του "=". Επίσης, γιατί δεν κάνεις το πεδίο του πίνακα Unique, ώστε να μην μπορεί να μπει δυο (ή και παραπάνω) φορές το ίδιο περιεχόμενο; Αν κάνω το πεδίο unique είναι μια λύση όπως λες.. αλλά νομίζω ότι δεν είναι πολύ καλή τακτική προγραμματιστικά να του βάζεις τις ίδιεσ τιμές και να περιμένεις να στις αποκλείσει.. δεν ξέρω.. δεν είναι πιο σωστό να το τσεκάρω εγώ και να τις αποκλείω πριν τις καταχωρίσω..?
bnvdarklord Δημοσ. 15 Μαρτίου 2012 Δημοσ. 15 Μαρτίου 2012 Μπορεις στην εφαρμογή σου να τρέχεις το "SELECT * FROM Municipalities WHERE municipality_name = 'otinanai'" και να ελεγχεις με καποιο if το αποτέλεσμα του, και μετά να κανεις insert ή να βγάζεις μήνυμα λάθους.
karabouzouk... Δημοσ. 15 Μαρτίου 2012 Μέλος Δημοσ. 15 Μαρτίου 2012 Μέσα στον ίδιο τον κώδικα της sql δεν είναι σωστό να γίνει αυτό ε..?? Θα το δοκιμάσω όπως το λες.. Γενικά γιατί δεν μου δουλεύει το if που χρησιμοποιώ..? είναι λάθος..? Δεν υποστηρίζεται πάντα..?
MastroGiannis Δημοσ. 15 Μαρτίου 2012 Δημοσ. 15 Μαρτίου 2012 Δεν ξέρω αν θα δουλέψει αλλά κάνε μια δοκιμή με την παρακάτω έκφραση: >INSERT INTO Municipalities (municipality_name) SELECT 'otinanai' FROM dual WHERE NOT EXISTS (SELECT * FROM Municipalities WHERE municipality_name = 'otinanai') Ίσως επίσης, στη MySQL να μην χρειάζεται το FROM dual.
bnvdarklord Δημοσ. 16 Μαρτίου 2012 Δημοσ. 16 Μαρτίου 2012 Μέσα στον ίδιο τον κώδικα της sql δεν είναι σωστό να γίνει αυτό ε..?? Θα το δοκιμάσω όπως το λες.. Γενικά γιατί δεν μου δουλεύει το if που χρησιμοποιώ..? είναι λάθος..? Δεν υποστηρίζεται πάντα..? Και στον ιδιο τον κωδικα της sql αν εβρισκες πως γινεται δεν ειναι λαθος. Το if που χρησιμοποιεις χωρίς να το δω δεν μπορω να μαντεψω γιατι δεν δουλευει.
karabouzouk... Δημοσ. 16 Μαρτίου 2012 Μέλος Δημοσ. 16 Μαρτίου 2012 Δεν ξέρω αν θα δουλέψει αλλά κάνε μια δοκιμή με την παρακάτω έκφραση: >INSERT INTO Municipalities (municipality_name) SELECT 'otinanai' FROM dual WHERE NOT EXISTS (SELECT * FROM Municipalities WHERE municipality_name = 'otinanai') Ίσως επίσης, στη MySQL να μην χρειάζεται το FROM dual. ..Δεν είχα ξανακούσει γι αυτό το DUAL ομολογώ..! Και δούλεψε και απόλυτα σωστά..! Να σαι καλά..! Και στον ιδιο τον κωδικα της sql αν εβρισκες πως γινεται δεν ειναι λαθος. Το if που χρησιμοποιεις χωρίς να το δω δεν μπορω να μαντεψω γιατι δεν δουλευει. Μα αυτός είναι ακριβώς ο κώδικας που προσπαθούσα να τρέξω.. Τι άλλο θέλεις να ξέρεις..? Γιατί δε μου βγάζει κάποιο λάθος κατά την εκτέλεση.. έχω συντακτικό λάθος.. κάτι δεν γράφω σωστα
bnvdarklord Δημοσ. 16 Μαρτίου 2012 Δημοσ. 16 Μαρτίου 2012 A νομιζα δοκιμασες κάτι άλλο με if στην εφαρμογή σου. Αφού δουλεψε παντως αυτό που εδωσε ο MastroGiannis τότε κομπλέ.
karabouzouk... Δημοσ. 16 Μαρτίου 2012 Μέλος Δημοσ. 16 Μαρτίου 2012 A νομιζα δοκιμασες κάτι άλλο με if στην εφαρμογή σου. Αφού δουλεψε παντως αυτό που εδωσε ο MastroGiannis τότε κομπλέ. όχι αυτό προσπαθούσα να τρέξω για αρχή για να καταλάβω πώς δουλεύει..! Ευχαριστώ για το χρόνο σου!
karabouzouk... Δημοσ. 5 Απριλίου 2012 Μέλος Δημοσ. 5 Απριλίου 2012 Καλησπέρα παιδιά θέλω να κάνω ακριβώς το ίδιο με αυτό που περιγράφεται παραπάνω αλλά με μια παραλλαγή.. Όταν υπάρχει η εγγραφή να κάνω UPDATE και όταν δεν υπάρχει να την προσθέτω. Αλλά δεν ξέρω πώς να υλοποιήσω αυτή τη συνθήκη που θα λέει ΑΝ υπάρχει update, ΑΛΛΙΩΣ INSERT και ούτε αν αυτή η τακτική είναι η σωστή.. προσπάθησα να χρησιμοποιήσω κάποια if για να το πετύχω αυτό αλλά μου έβγαζε syntax errors, δεν ξέρω αν το if υποστηρίζεται ή υπάρχει κάποιος άλλος τρόπος.. πχ να πω update ..... where exists (kati) και στο καπάκι να λέω insert ..... where not exists (kati). Αλλά έτσι θα τρέχουν πάντα και οι δύο εντολές (μαζί με όλες τις select που ίσως έχουν μέσα) και χάνουμε πολύ σε χρόνο εκτέλεσης και σπατάλη υπολογισμών αφού κάθε φορά μια από τις δύο εντολές θα κάνει κάποιο insert ή update. Ευχαριστώ πολύ
bnvdarklord Δημοσ. 5 Απριλίου 2012 Δημοσ. 5 Απριλίου 2012 Για δες αυτό http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
karabouzouk... Δημοσ. 6 Απριλίου 2012 Μέλος Δημοσ. 6 Απριλίου 2012 Για δες αυτό http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html O τρόπος που λες με τo ON DUPLICATE KEY UPDATE απ όσο διάβασα αναφέρεται μόνο σε στήλη που έχεις ορίσει τα δεδομένα της UNIQUE δηλαδή μοναδικά.. αλλά στη δική μου περίπτωση ο συνδυασμός κάποιων στηλών είναι που αποτελεί μοναδική εγγραφή.. Δηλαδή θέλω να ελέγχω ΑΝ υπάρχει (στήλη1=κάτι ΚΑΙ στήλη2=κάτι) τότε update ΑΛΛΙΩΣ insert Προς το παρόν το υλοποίησα με ξεχωριστό insert και update αλλά αυτό το ΑΛΛΙΩΣ δεν υπάρχει τρόπος να το υλοποιήσουμε να γλιτώσω τους περιττούς υπολογισμούς (δλδ select κλπ..)..? ευχαριστώ
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα