Μπορείς να φέρεις οποιαδήποτε πεδία θες, αλλά πρέπει να τα δηλώσεις ρητά, άσχετα αν έχουν κοινά ονόματα ή όχι.<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>Το πρόβλημα είναι το: &quot;όταν δεις ίδιο όνομα, φέρε μόνο του Α&quot;. Αυτό δε νομίζω ότι γίνεται με άλλο τρόπο εκτός από NATURAL JOIN, το οποίο όπως είπες προυποθέτει και ίδιες τιμές... <br><br><div class="gmail_quote">
2009/3/27 Θοδωρής Λύτρας <span dir="ltr">&lt;<a href="mailto:thlytras@gmail.com">thlytras@gmail.com</a>&gt;</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>
κάποιος τρόπος να το κάνω αυτόματα, χωρίς να πρέπει να &quot;διαβάσω&quot; τα πεδία και<br>
των δύο πινάκων και να επιλέξω με το χέρι τα σωστά.<br>
<br>
Φαίνεται όμως οτι δεν υπάρχει τέτοια περίπτωση, απ&#39; ότι μου λέτε... Πάντως<br>
εντύπωση μου κάνει, γιατί το να υπάρχουν συνονόματα πεδία στους πίνακες είναι<br>
προφανώς ένα ρεαλιστικό σενάριο, και έχει προβλεφθεί (τουλάχιστον από την<br>
sqlite, υποθέτω και από τις άλλες RDBMS). Βρίσκω περίεργο λοιπόν που δεν<br>
υπάρχει κάποιο clause να ορίζει το αν θα πρέπει να κρατήσει και τα δύο πεδία<br>
ή μόνο το ένα.<br>
<br>
Θοδωρής<br>
<br>
Στις Παρ 27 Μαρ 2009, ο/η Tasos Laskos έγραψε:<br>
<div><div></div><div class="h5">&gt; 8a symfoniso me ton George kai sta 2 point tou.<br>
&gt;<br>
&gt; Sostotero 8a itan to mono koino paidio sta 2 table na einai to id me to<br>
&gt; opoio ginete i antistixisi.<br>
&gt;<br>
&gt; George Zarogiannis wrote:<br>
&gt; &gt; Νομίζω ότι όντως ζητάς πολλά από την SQL :)<br>
&gt; &gt;<br>
&gt; &gt; Ο μοναδικός τρόπος που μπορώ να σκεφτώ, υποθέτωντας ότι γράφεις σε<br>
&gt; &gt; κάποια γλώσσα, είναι να διαβάσεις πρώτα τα πεδία των 2 πινάκων και<br>
&gt; &gt; μετά να φτιάξεις δυναμικά το SELECT ώστε να περιέχει κάθε όνομα πεδίου<br>
&gt; &gt; 1 φορά. Το πως θα το κάνεις αυτό, εξαρτάται από τη γλώσσα/βάση που<br>
&gt; &gt; δουλεύεις...<br>
&gt; &gt;<br>
&gt; &gt; πχ ένας τρόπος να δεις τα πεδία ενός table από τη java, ανεξάρτητα<br>
&gt; &gt; βάσης, είναι αυτός<br>
&gt; &gt; &lt;<a href="http://www.roseindia.net/jdbc/jdbc-mysql/ColumnName.shtml" target="_blank">http://www.roseindia.net/jdbc/jdbc-mysql/ColumnName.shtml</a>&gt;<br>
&gt; &gt;<br>
&gt; &gt; Αλλά αυτό που θες μου φαίνεται λίγο περίεργο... μήπως πρέπει να<br>
&gt; &gt; ξανασκεφτείς το σχήμα της βάσης;<br>
&gt; &gt;<br>
&gt; &gt; 2009/3/27 Theodore Lytras &lt;<a href="mailto:thlytras@gmail.com">thlytras@gmail.com</a><br>
&gt; &gt; &lt;mailto:<a href="mailto:thlytras@gmail.com">thlytras@gmail.com</a>&gt;&gt;<br>
&gt; &gt;<br>
&gt; &gt;     Έχω μια ερωτησούλα για όποιον ξέρει καλή SQL.<br>
&gt; &gt;     Ψάχνω στον γκούγκλη αλλά άκρη δε βρίσκω....<br>
&gt; &gt;<br>
&gt; &gt;     Έστω οτι έχω δύο πίνακες A και B, με σχέση 1:1 και κοινό πεδίο<br>
&gt; &gt; ονόματι id. Αν θέλω να συνενώσω τους δύο πίνακες, θα δώσω:<br>
&gt; &gt;<br>
&gt; &gt;     SELECT * FROM A, B WHERE A.id = B.id;<br>
&gt; &gt;<br>
&gt; &gt;     ή<br>
&gt; &gt;<br>
&gt; &gt;     SELECT * FROM A INNER JOIN B USING(id);<br>
&gt; &gt;<br>
&gt; &gt;     Το πρόβλημα τώρα προκύπτει στην περίπτωση που υπάρχουν πεδία στον Α<br>
&gt; &gt;     και στον Β με το ίδιο όνομα. Οι δύο προηγούμενες εντολές κρατούν τα<br>
&gt; &gt;     πεδία και των δύο πινάκων (αφού ορίζω SELECT * ), και (τουλάχιστο σε<br>
&gt; &gt;     SQLite που δοκίμασα) τα πεδία του δεύτερου πίνακα μετονομάζονται με<br>
&gt; &gt;     την προσθήκη ενός &quot;:1&quot; στο όνομά τους.<br>
&gt; &gt;<br>
&gt; &gt;     Υπάρχει κάποιος τρόπος να φιλτράρω τα πεδία του δεύτερου πίνακα? Να<br>
&gt; &gt;     του πω δηλαδή να επιλέξει όλα τα πεδία του πρώτου πίνακα, ΣΥΝ όλα τα<br>
&gt; &gt;     πεδία του δεύτερου που δεν υπάρχουν στον πρώτο πίνακα. Βεβαίως αυτό<br>
&gt; &gt; με κάποιο expression, χωρίς δηλαδή να ξέρω εκ των προτέρων τι πεδία<br>
&gt; &gt; υπάρχουν στον ένα και στον άλλο πίνακα.<br>
&gt; &gt;<br>
&gt; &gt;     Υπ&#39;όψιν οτι δε μιλώ για NATURAL JOIN, που (αν τουλάχιστον το κατάλαβα<br>
&gt; &gt;     σωστά) κρατά τις εγγραφές εκείνες εφόσον όλα τα &quot;συνονόματα&quot; πεδία<br>
&gt; &gt;     έχουν ίδιες τιμές. Εγώ θέλω να του ορίζω σαφώς ένα κοινό πεδίο για<br>
&gt; &gt;     INNER JOIN, και από τα υπόλοιπα &quot;συνονόματα&quot; πεδία να κρατά μόνο τις<br>
&gt; &gt;     τιμές που έχει ο ένας πίνακας, ανεξαρτήτως τι έχει ο άλλος πίνακας.<br>
&gt; &gt;<br>
&gt; &gt;     Γίνεται αυτό? Ή ζητώ πολλά από την SQL????<br>
&gt; &gt;<br>
&gt; &gt;     Ευχαριστώ προκαταβολικά,<br>
&gt; &gt;<br>
&gt; &gt;     Θοδωρής<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>