SQL join ερώτηση

Theodore Lytras thlytras at gmail.com
Fri Mar 27 15:00:34 EET 2009


Έχω μια ερωτησούλα για όποιον ξέρει καλή SQL.
Ψάχνω στον γκούγκλη αλλά άκρη δε βρίσκω....

Έστω οτι έχω δύο πίνακες A και B, με σχέση 1:1 και κοινό πεδίο ονόματι
id. Αν θέλω να συνενώσω τους δύο πίνακες, θα δώσω:

SELECT * FROM A, B WHERE A.id = B.id;

ή

SELECT * FROM A INNER JOIN B USING(id);

Το πρόβλημα τώρα προκύπτει στην περίπτωση που υπάρχουν πεδία στον Α
και στον Β με το ίδιο όνομα. Οι δύο προηγούμενες εντολές κρατούν τα
πεδία και των δύο πινάκων (αφού ορίζω SELECT * ), και (τουλάχιστο σε
SQLite που δοκίμασα) τα πεδία του δεύτερου πίνακα μετονομάζονται με
την προσθήκη ενός ":1" στο όνομά τους.

Υπάρχει κάποιος τρόπος να φιλτράρω τα πεδία του δεύτερου πίνακα? Να
του πω δηλαδή να επιλέξει όλα τα πεδία του πρώτου πίνακα, ΣΥΝ όλα τα
πεδία του δεύτερου που δεν υπάρχουν στον πρώτο πίνακα. Βεβαίως αυτό με
κάποιο expression, χωρίς δηλαδή να ξέρω εκ των προτέρων τι πεδία
υπάρχουν στον ένα και στον άλλο πίνακα.

Υπ'όψιν οτι δε μιλώ για NATURAL JOIN, που (αν τουλάχιστον το κατάλαβα
σωστά) κρατά τις εγγραφές εκείνες εφόσον όλα τα "συνονόματα" πεδία
έχουν ίδιες τιμές. Εγώ θέλω να του ορίζω σαφώς ένα κοινό πεδίο για
INNER JOIN, και από τα υπόλοιπα "συνονόματα" πεδία να κρατά μόνο τις
τιμές που έχει ο ένας πίνακας, ανεξαρτήτως τι έχει ο άλλος πίνακας.

Γίνεται αυτό? Ή ζητώ πολλά από την SQL????

Ευχαριστώ προκαταβολικά,

Θοδωρής


More information about the Linux-greek-users mailing list