Μπορείς να φέρεις οποιαδήποτε πεδία θες, αλλά πρέπει να τα δηλώσεις ρητά, άσχετα αν έχουν κοινά ονόματα ή όχι.<div><br></div><div>Δηλαδή πχ... SELECT A.a1, A.a2, B.b1, B.b2,.... FROM A INNER JOIN B ON A.Key = B.Key</div><div>
<br></div><div>Το πρόβλημα είναι το: "όταν δεις ίδιο όνομα, φέρε μόνο του Α". Αυτό δε νομίζω ότι γίνεται με άλλο τρόπο εκτός από NATURAL JOIN, το οποίο όπως είπες προυποθέτει και ίδιες τιμές... <br><br><div class="gmail_quote">
2009/3/27 Θοδωρής Λύτρας <span dir="ltr"><<a href="mailto:thlytras@gmail.com">thlytras@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Παιδιά σωστά τα λέτε, κανονικά αυτό θα έπρεπε να μη παίζει στο σχήμα της<br>
βάσης, ή τουλάχιστον τα όποια κοινά πεδία να έχουν και ίδιες τιμές, ώστε να<br>
αρκεί ένα NATURAL JOIN.<br>
<br>
Δυστυχώς οι πίνακες τους οποίους προσπαθώ να ενώσω είναι έτσι στραβά<br>
φτιαγμένοι, και επειδή δεν είναι ένας και δύο προσπαθώ να φτιάξω μια<br>
εφαρμογούλα για να τους συνενώνει σωστά. Και προσπαθούσα να βρω αν υπάρχει<br>
κάποιος τρόπος να το κάνω αυτόματα, χωρίς να πρέπει να "διαβάσω" τα πεδία και<br>
των δύο πινάκων και να επιλέξω με το χέρι τα σωστά.<br>
<br>
Φαίνεται όμως οτι δεν υπάρχει τέτοια περίπτωση, απ' ότι μου λέτε... Πάντως<br>
εντύπωση μου κάνει, γιατί το να υπάρχουν συνονόματα πεδία στους πίνακες είναι<br>
προφανώς ένα ρεαλιστικό σενάριο, και έχει προβλεφθεί (τουλάχιστον από την<br>
sqlite, υποθέτω και από τις άλλες RDBMS). Βρίσκω περίεργο λοιπόν που δεν<br>
υπάρχει κάποιο clause να ορίζει το αν θα πρέπει να κρατήσει και τα δύο πεδία<br>
ή μόνο το ένα.<br>
<br>
Θοδωρής<br>
<br>
Στις Παρ 27 Μαρ 2009, ο/η Tasos Laskos έγραψε:<br>
<div><div></div><div class="h5">> 8a symfoniso me ton George kai sta 2 point tou.<br>
><br>
> Sostotero 8a itan to mono koino paidio sta 2 table na einai to id me to<br>
> opoio ginete i antistixisi.<br>
><br>
> George Zarogiannis wrote:<br>
> > Νομίζω ότι όντως ζητάς πολλά από την SQL :)<br>
> ><br>
> > Ο μοναδικός τρόπος που μπορώ να σκεφτώ, υποθέτωντας ότι γράφεις σε<br>
> > κάποια γλώσσα, είναι να διαβάσεις πρώτα τα πεδία των 2 πινάκων και<br>
> > μετά να φτιάξεις δυναμικά το SELECT ώστε να περιέχει κάθε όνομα πεδίου<br>
> > 1 φορά. Το πως θα το κάνεις αυτό, εξαρτάται από τη γλώσσα/βάση που<br>
> > δουλεύεις...<br>
> ><br>
> > πχ ένας τρόπος να δεις τα πεδία ενός table από τη java, ανεξάρτητα<br>
> > βάσης, είναι αυτός<br>
> > <<a href="http://www.roseindia.net/jdbc/jdbc-mysql/ColumnName.shtml" target="_blank">http://www.roseindia.net/jdbc/jdbc-mysql/ColumnName.shtml</a>><br>
> ><br>
> > Αλλά αυτό που θες μου φαίνεται λίγο περίεργο... μήπως πρέπει να<br>
> > ξανασκεφτείς το σχήμα της βάσης;<br>
> ><br>
> > 2009/3/27 Theodore Lytras <<a href="mailto:thlytras@gmail.com">thlytras@gmail.com</a><br>
> > <mailto:<a href="mailto:thlytras@gmail.com">thlytras@gmail.com</a>>><br>
> ><br>
> > Έχω μια ερωτησούλα για όποιον ξέρει καλή SQL.<br>
> > Ψάχνω στον γκούγκλη αλλά άκρη δε βρίσκω....<br>
> ><br>
> > Έστω οτι έχω δύο πίνακες A και B, με σχέση 1:1 και κοινό πεδίο<br>
> > ονόματι id. Αν θέλω να συνενώσω τους δύο πίνακες, θα δώσω:<br>
> ><br>
> > SELECT * FROM A, B WHERE A.id = B.id;<br>
> ><br>
> > ή<br>
> ><br>
> > SELECT * FROM A INNER JOIN B USING(id);<br>
> ><br>
> > Το πρόβλημα τώρα προκύπτει στην περίπτωση που υπάρχουν πεδία στον Α<br>
> > και στον Β με το ίδιο όνομα. Οι δύο προηγούμενες εντολές κρατούν τα<br>
> > πεδία και των δύο πινάκων (αφού ορίζω SELECT * ), και (τουλάχιστο σε<br>
> > SQLite που δοκίμασα) τα πεδία του δεύτερου πίνακα μετονομάζονται με<br>
> > την προσθήκη ενός ":1" στο όνομά τους.<br>
> ><br>
> > Υπάρχει κάποιος τρόπος να φιλτράρω τα πεδία του δεύτερου πίνακα? Να<br>
> > του πω δηλαδή να επιλέξει όλα τα πεδία του πρώτου πίνακα, ΣΥΝ όλα τα<br>
> > πεδία του δεύτερου που δεν υπάρχουν στον πρώτο πίνακα. Βεβαίως αυτό<br>
> > με κάποιο expression, χωρίς δηλαδή να ξέρω εκ των προτέρων τι πεδία<br>
> > υπάρχουν στον ένα και στον άλλο πίνακα.<br>
> ><br>
> > Υπ'όψιν οτι δε μιλώ για NATURAL JOIN, που (αν τουλάχιστον το κατάλαβα<br>
> > σωστά) κρατά τις εγγραφές εκείνες εφόσον όλα τα "συνονόματα" πεδία<br>
> > έχουν ίδιες τιμές. Εγώ θέλω να του ορίζω σαφώς ένα κοινό πεδίο για<br>
> > INNER JOIN, και από τα υπόλοιπα "συνονόματα" πεδία να κρατά μόνο τις<br>
> > τιμές που έχει ο ένας πίνακας, ανεξαρτήτως τι έχει ο άλλος πίνακας.<br>
> ><br>
> > Γίνεται αυτό? Ή ζητώ πολλά από την SQL????<br>
> ><br>
> > Ευχαριστώ προκαταβολικά,<br>
> ><br>
> > Θοδωρής<br>
<br>
--<br>
linux-greek-users mailing list -- <a href="http://lists.hellug.gr" target="_blank">http://lists.hellug.gr</a></div></div></blockquote></div><br></div>