The_Judas Δημοσ. 19 Οκτωβρίου 2014 Δημοσ. 19 Οκτωβρίου 2014 Προσπαθώ να κάνω μια αλλαγή σε μια βάση δεδομένων. Υπάρχουν κάποιοι πελάτες που είχαν πληρώσει μια συνδρομή για το 2014 το ποσό των 50 ευρώ και κάποιοι άλλοι 40. Το 2015 θα γίνει αυτόματα η χρέωση σε όλους το ποσό των 40. Θέλω όμως έπειτα να αλλάξω σε αυτούς που είχαν δώσει τα 50 το 2014, το ποσό του 2015 από 40 σε 30. Με αυτό το query βρίσκω αυτούς που χρειάζομαι: select pelatisT.eponimo,pelatisT.onoma, xreosiT.posoXreosis from xreosiT INNER JOIN pelatisT on xreosiT.pelatisID=pelatisT.pelatisID where OikEtos=2014 and posoXreosis= 50 υπάρχει δηλαδή πίνακας pelatisT και πίνακας με τις χρεώσεις xreosiT. Δεν μπορώ να σκεφτώ όμως έναν τρόπο για να αλλάξω την χρέωση των συγκεκριμένων για το 2015.
Επισκέπτης Δημοσ. 19 Οκτωβρίου 2014 Δημοσ. 19 Οκτωβρίου 2014 http://technet.microsoft.com/en-us/library/ms188713(v=sql.105).aspx http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match(14)
Papakaliati Δημοσ. 19 Οκτωβρίου 2014 Δημοσ. 19 Οκτωβρίου 2014 Προσπαθώ να κάνω μια αλλαγή σε μια βάση δεδομένων. Υπάρχουν κάποιοι πελάτες που είχαν πληρώσει μια συνδρομή για το 2014 το ποσό των 50 ευρώ και κάποιοι άλλοι 40. Το 2015 θα γίνει αυτόματα η χρέωση σε όλους το ποσό των 40. Θέλω όμως έπειτα να αλλάξω σε αυτούς που είχαν δώσει τα 50 το 2014, το ποσό του 2015 από 40 σε 30. Με αυτό το query βρίσκω αυτούς που χρειάζομαι: select pelatisT.eponimo,pelatisT.onoma, xreosiT.posoXreosis from xreosiT INNER JOIN pelatisT on xreosiT.pelatisID=pelatisT.pelatisID where OikEtos=2014 and posoXreosis= 50 υπάρχει δηλαδή πίνακας pelatisT και πίνακας με τις χρεώσεις xreosiT. Δεν μπορώ να σκεφτώ όμως έναν τρόπο για να αλλάξω την χρέωση των συγκεκριμένων για το 2015. πιστευω μπορεις απλα να κανεις update με set posoXreosis = if ( OikEtos=2014 and posoXreosis= 50, 40 , 30 ) . Δεν ειμαι σιγουρος για την συνταξη σε sql, αλλα σε mysql αυτο θα εκανα.
The_Judas Δημοσ. 19 Οκτωβρίου 2014 Μέλος Δημοσ. 19 Οκτωβρίου 2014 οκ ευχαριστώ θα τσεκάρω τις απαντήσεις σας πιο αναλυτικά. Προσοχή όμως, θέλω να αλλάξω την συνδρομή του 2015 μόνο γι'αυτούς που είχαν χρεωθεί 50€ το 2014. Αν κάνω ένα απλό update με set posoXreosis θα αλλαχτεί η συνδρομή του 2014 γι'αυτούς! Οι πίνακες που εμπλέκονται είναι οι εξής: pelatisT: pelatisID, onoma, eponimo κλπ xreosiT: xreosiID, pelatisID, posoxreosis, OikEtos κλπ
Kapws Δημοσ. 19 Οκτωβρίου 2014 Δημοσ. 19 Οκτωβρίου 2014 Κάτι τέτοιο; select * into TMP_xreosiT from xreosiT update TMP_xreosiT set posoXreosis = 30, OikEtos = 2015 where OikEtos = 2014 and posoXreosis = 50 Κάνε μετά Insert τα δεδομένα από τον tmp πίνακα, στον αρχικό σου και τέλος drop τον tmp. Δεν αναφέρεις αν έχει δημιουργήσει εγγραφές γι αυτούς τους χρήστες για το 2015, οπότε ήταν το πρώτο που σκέφτηκα.
The_Judas Δημοσ. 19 Οκτωβρίου 2014 Μέλος Δημοσ. 19 Οκτωβρίου 2014 Για το 2015 θα είναι περασμένα τα δεδομένα με το ποσό χρέωσης ίσο με 40 σε όλους. Το ποσό χρέωσης του 2015 θα αλλάξει στα 30 μόνο σε αυτούς που είχαν πληρώσει 50 το 2014. Για τους υπόλοιπους θα είναι 40.
Kapws Δημοσ. 20 Οκτωβρίου 2014 Δημοσ. 20 Οκτωβρίου 2014 Για το 2015 θα είναι περασμένα τα δεδομένα με το ποσό χρέωσης ίσο με 40 σε όλους. Το ποσό χρέωσης του 2015 θα αλλάξει στα 30 μόνο σε αυτούς που είχαν πληρώσει 50 το 2014. Για τους υπόλοιπους θα είναι 40. Οκ τότε θα κάνεις απλά ένα replicate των IDs που σε ενδιαφέρουν από τον TMP στον αρχικό πίνακα (που το ποσό θα είναι ήδη edited στα 30€)... Ένα snapshot των πινάκων μπορούμε να έχουμε; Ποιο το PK τους; είναι ξεχωριστό column το 2014, από το 2015 ή θα υπάρξουν 2 εγγραφές για τον ίδιο χρήστη και θα αλλάζει το OikEtos;
TAKE5 Δημοσ. 20 Οκτωβρίου 2014 Δημοσ. 20 Οκτωβρίου 2014 UPDATE xreosit a set a.posoxreosis=30 where a.oiketos=2015 and a.posoxreosis=40 and exists (select 'l' from xreosit b where a.pelatisid=b.pelatisid and b.oiketos=2014 and b.posoxreosis=50) 2
Papakaliati Δημοσ. 20 Οκτωβρίου 2014 Δημοσ. 20 Οκτωβρίου 2014 Για το 2015 θα είναι περασμένα τα δεδομένα με το ποσό χρέωσης ίσο με 40 σε όλους. Το ποσό χρέωσης του 2015 θα αλλάξει στα 30 μόνο σε αυτούς που είχαν πληρώσει 50 το 2014. Για τους υπόλοιπους θα είναι 40. με την λυση που σου προτεινα με το set = if ( etc ) δεν χρειαζεσαι ουτε να κανεις drop tables ουτε να τρεξεις το set δυο φορες.
The_Judas Δημοσ. 20 Οκτωβρίου 2014 Μέλος Δημοσ. 20 Οκτωβρίου 2014 Οκ τότε θα κάνεις απλά ένα replicate των IDs που σε ενδιαφέρουν από τον TMP στον αρχικό πίνακα (που το ποσό θα είναι ήδη edited στα 30€)... Ένα snapshot των πινάκων μπορούμε να έχουμε; Ποιο το PK τους; είναι ξεχωριστό column το 2014, από το 2015 ή θα υπάρξουν 2 εγγραφές για τον ίδιο χρήστη και θα αλλάζει το OikEtos; pelatisT: pelatisID, onoma, eponimo, active κλπ : Το pelatisID είναι το primary key. xreosiT: xreosiID, pelatisID, posoxreosis, OikEtos κλπ : xreosiID είναι το primary key και foreign key pelatisID. Το οικονομικό έτος είναι μια στήλη, για την οποία ο καθε πελάτης έχει πολλές εγγραφές. Αυτό που ξέχασα να πω, είναι ότι εμπλέκεται και ένα πεδίο που δείχνει αν είναι ενεργοί ή όχι. π.χ active=1. Δηλαδή: (select pelatisT.eponimo,pelatisT.onoma, xreosiT.posoXreosis from xreosiT INNER JOIN pelatisT on xreosiT.pelatisID=pelatisT.pelatisID where OikEtos=2014 and posoXreosis= 50 and active=1) Οπότε εμπλέκεται και ο πίνακας pelatis μέσα. Γι' αυτό και έβαλα μέσα και το inner join.
TAKE5 Δημοσ. 20 Οκτωβρίου 2014 Δημοσ. 20 Οκτωβρίου 2014 ε βαλε στο exists που σου έγραψα και join με το τον pelatis
The_Judas Δημοσ. 20 Οκτωβρίου 2014 Μέλος Δημοσ. 20 Οκτωβρίου 2014 Σας ευχαριστώ όλους για την βοήθεια: Με μικροαλλαγές κυρίως από τον κώδικα του take5 κατέληξα σε αυτό που χρειαζόμουν: update a set a.posoxreosis=30 from xreosiT a where a.oiketos=2015 and a.posoxreosis=40 and exists (select 'l' from xreosit b join pelatisT on b.pelatisID=pelatisT.pelatisID where a.pelatisid=b.pelatisid and b.oiketos=2014 and b.posoxreosis=50 and active=1)
a.c.a.b Δημοσ. 26 Νοεμβρίου 2014 Δημοσ. 26 Νοεμβρίου 2014 Καλήσπέρα κάνω μια άσκηση για τη σχολή και έχω κολλήσει στο παρακάτω: update ypallhlosset salary=salary+100where hmeromhnia proslhpshs<%1994%; Θέλω να κάνω αυξηση στους υπαλληλους που δουλεύουν 20 ++ χρόνια( αρα πριν το 1994) .Ειμαι 99% σίγουρη οτι έχω γραψει πατατα αλλά θα ήθελα να μου το επιβεβαιώσετε κ αν ξέρει κάποιος να μου πει ένα σωστό τρόπο να το γράψω.
Ilias95 Δημοσ. 26 Νοεμβρίου 2014 Δημοσ. 26 Νοεμβρίου 2014 Καλήσπέρα κάνω μια άσκηση για τη σχολή και έχω κολλήσει στο παρακάτω: update ypallhlos set salary=salary+100 where hmeromhnia proslhpshs<%1994%; Θέλω να κάνω αυξηση στους υπαλληλους που δουλεύουν 20 ++ χρόνια( αρα πριν το 1994) .Ειμαι 99% σίγουρη οτι έχω γραψει πατατα αλλά θα ήθελα να μου το επιβεβαιώσετε κ αν ξέρει κάποιος να μου πει ένα σωστό τρόπο να το γράψω. Τι τύπου είναι το hmeromhnia_proslhpshs; (φαντάζομαι ήθελες να το γράψεις χωρίς κενό) Αν είναι timestamp κάτι τέτοιο θα δούλευε: where DATE(hmeromhnia_proslhpshs) < '1994-00-00';
a.c.a.b Δημοσ. 26 Νοεμβρίου 2014 Δημοσ. 26 Νοεμβρίου 2014 Τι τύπου είναι το hmeromhnia_proslhpshs; (φαντάζομαι ήθελες να το γράψεις χωρίς κενό) Αν είναι timestamp κάτι τέτοιο θα δούλευε: where DATE(hmeromhnia_proslhpshs) < '1994-00-00'; Νομίζω είναι αυτό που έψαχνα! Σε ευχαριστώ πάρα πάρα πολύ!!! Site: thank you!!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα