tabos23 Δημοσ. 21 Ιανουαρίου 2015 Δημοσ. 21 Ιανουαρίου 2015 Καλησπέρα! Θα ήθελα βοήθεια με μια FULL OUTER JOIN στην ACCESS 2010 απλά πρόκειται για δυο tables με many το many relationship. Βρήκα στο internet ένα παράδειγμα αλλα πρόκειται για one το many relationship που γίνεται αρκετά εύκολα αλλα δεν μπόρεσα να το εφαρμόσω στη δικη μου περίπτωση.Έχω λοιπόν τον πινακα Server και τον πινακα Application και τον ενδιάμεσο πινακα ServerID-"ApplicationID".Πως μπορώ να δημιουργήσω μια FULL OUTER JOIN για αυτούς τους δυο πίνακες? Ευχαριστώ πολύ εκ των προτερων.
Aztec Δημοσ. 21 Ιανουαρίου 2015 Δημοσ. 21 Ιανουαρίου 2015 (επεξεργασμένο) Θες να γράψεις ένα query με full outer join η ρωτάς πως θα φτιάξεις ενα junction table για τους πινακες σου ;Ουπς εντάξει θες να γράψεις ένα full outer join . Κάνε simulate το full outer join με union του left και right outer join Επεξ/σία 21 Ιανουαρίου 2015 από Aztec
tabos23 Δημοσ. 21 Ιανουαρίου 2015 Μέλος Δημοσ. 21 Ιανουαρίου 2015 Θες να γράψεις ένα query με full outer join η ρωτάς πως θα φτιάξεις ενα junction table για τους πινακες σου ; Ουπς εντάξει θες να γράψεις ένα full outer join . Κάνε simulate το full outer join με union του left και right outer join Όχι θέλω να γράψω ένα query με full outer join. Απότι έψαξα πρέπει να κάνω 3 queries στο σύνολο k να τα ενώσω με union.
Aztec Δημοσ. 21 Ιανουαρίου 2015 Δημοσ. 21 Ιανουαρίου 2015 Με ενα union λογικά γινεται έτσι select a.serverid,b.appid from server a left outer join endiameso b on(a.serverid=b.serverid) union select a.serverid,b.appid from endiameso a right outer join application b on(a.appid=b.appid)
Papakaliati Δημοσ. 21 Ιανουαρίου 2015 Δημοσ. 21 Ιανουαρίου 2015 SELECT * FROM endiameso LEFT JOIN server ON server.id = endiameso.idLEFT JOIN application ON application.id = endiameso.id η αμα δεν κανει αυτο, select * FROM (SELECT * FROM endiameso LEFT JOIN server ON server.serverid = endiameso.endiamesoid ) as k LEFT JOIN k ON k.serveridid = endiameso.endiamesoid οπου * προφανος αυτα που θελεις. Ειμαι λιγο σκουριασμενος στα query αλλα νομιζω ενα απο τα δυο θα κανει, εστω και αν ισως χρειαζεται μικρες μετατροπες. Να εχεις στο μυαλο σου οτι μπορεις γενικα να κανεις select * FROM ( ενα αλλο select * εδω μεσα με left join etc ) as kati Left Join etc etc on Kati.id = etc etc. ωστε να κανεις μια αλυσιδα σε εισαγωγικα. Οπως και να εχει union δεν χρειαζεσαι.
Aztec Δημοσ. 22 Ιανουαρίου 2015 Δημοσ. 22 Ιανουαρίου 2015 SELECT * FROM endiameso LEFT JOIN server ON server.id = endiameso.id LEFT JOIN application ON application.id = endiameso.id η αμα δεν κανει αυτο, select * FROM (SELECT * FROM endiameso LEFT JOIN server ON server.serverid = endiameso.endiamesoid ) as k LEFT JOIN k ON k.serveridid = endiameso.endiamesoid οπου * προφανος αυτα που θελεις. Ειμαι λιγο σκουριασμενος στα query αλλα νομιζω ενα απο τα δυο θα κανει, εστω και αν ισως χρειαζεται μικρες μετατροπες. Να εχεις στο μυαλο σου οτι μπορεις γενικα να κανεις select * FROM ( ενα αλλο select * εδω μεσα με left join etc ) as kati Left Join etc etc on Kati.id = etc etc. ωστε να κανεις μια αλυσιδα σε εισαγωγικα. Οπως και να εχει union δεν χρειαζεσαι. Ας φτιάξουμε μερικούς πίνακες να δούμε τι γίνεται Table server ----------------- 1 2 3 Table Application ---------------- 4 5 6 Table serv_app (junction) ---------------- NO VALUES Query SELECT * FROM serv_app LEFT JOIN server ON (server.id = serv_app.serverid) LEFT JOIN application ON (application.id = serv_app.appid); No results. Αυτό το query έχει νόημα αν συνδέεις τον πρώτο πίνακα με άλλους δύο και βαράς δυο left outer join. Το φτιάχνω λίγο καλύτερα γιατί κατάλαβα τι πας να κάνεις select * from server a left outer join serv_app b on(a.id=b.serverid) right outer join application c on (b.appid=c.id); NULL, NULL, NULL, '4' NULL, NULL, NULL, '5' NULL, NULL, NULL, '6' Χάθηκαν οι εγγραφές του server (γιατί όμως ?) Για το δέυτερο που αναφέρεις το εγγραψα λίγο διαφορετικά select * FROM (SELECT * FROM server a LEFT JOIN serv_app b ON a.id = b.serverid ) k RIGHT JOIN application p ON p.id = k.appid; NULL, NULL, '4' NULL, NULL, '5' NULL, NULL, '6' Αν όντως έχεις κάποια clean ιδέα ρίξε την .Πρέπει να επιστρέψει αυτό select * from server a left outer join serv_app b on(a.id=b.serverid) union select * from serv_app a right outer join application b on(a.appid=b.id); '1', NULL, NULL '2', NULL, NULL '3', NULL, NULL NULL, NULL, '4' NULL, NULL, '5' NULL, NULL, '6'
Papakaliati Δημοσ. 22 Ιανουαρίου 2015 Δημοσ. 22 Ιανουαρίου 2015 Ας φτιάξουμε μερικούς πίνακες να δούμε τι γίνεται Table server ----------------- 1 2 3 Table Application ---------------- 4 5 6 Table serv_app (junction) ---------------- NO VALUES Query SELECT * FROM serv_app LEFT JOIN server ON (server.id = serv_app.serverid) LEFT JOIN application ON (application.id = serv_app.appid); No results. Αυτό το query έχει νόημα αν συνδέεις τον πρώτο πίνακα με άλλους δύο και βαράς δυο left outer join. Το φτιάχνω λίγο καλύτερα γιατί κατάλαβα τι πας να κάνεις select * from server a left outer join serv_app b on(a.id=b.serverid) right outer join application c on (b.appid=c.id); NULL, NULL, NULL, '4' NULL, NULL, NULL, '5' NULL, NULL, NULL, '6' Χάθηκαν οι εγγραφές του server (γιατί όμως ?) Για το δέυτερο που αναφέρεις το εγγραψα λίγο διαφορετικά select * FROM (SELECT * FROM server a LEFT JOIN serv_app b ON a.id = b.serverid ) k RIGHT JOIN application p ON p.id = k.appid; NULL, NULL, '4' NULL, NULL, '5' NULL, NULL, '6' Αν όντως έχεις κάποια clean ιδέα ρίξε την .Πρέπει να επιστρέψει αυτό select * from server a left outer join serv_app b on(a.id=b.serverid) union select * from serv_app a right outer join application b on(a.appid=b.id); '1', NULL, NULL '2', NULL, NULL '3', NULL, NULL NULL, NULL, '4' NULL, NULL, '5' NULL, NULL, '6' Ε κοιτα προφανος τα query μου εχουνε νοημα αμα ο πινακας που ενωνει τους δυο προηγουμενους εχει καποια στοιχεια. Φυσικα αμα ειναι null τοτε πρεπει να παρεις σαν συνολοικο αποτελεσμα no result , γιατι δεν εχουνε τιποτα κοινο. Και ενα ακομη ερωτημα μου ειναι ποιο το νοημα να εχεις εναν τριτο πινακα ισα ισα ωστε να κανεις AppID = serverID, και να μην κανεις απλα ενα field στον server, server_appid το οποιο ειναι linked με το appid ;
Aztec Δημοσ. 22 Ιανουαρίου 2015 Δημοσ. 22 Ιανουαρίου 2015 Ε κοιτα προφανος τα query μου εχουνε νοημα αμα ο πινακας που ενωνει τους δυο προηγουμενους εχει καποια στοιχεια. Φυσικα αμα ειναι null τοτε πρεπει να παρεις σαν συνολοικο αποτελεσμα no result , γιατι δεν εχουνε τιποτα κοινο. Και ενα ακομη ερωτημα μου ειναι ποιο το νοημα να εχεις εναν τριτο πινακα ισα ισα ωστε να κανεις AppID = serverID, και να μην κανεις απλα ενα field στον server, server_appid το οποιο ειναι linked με το appid ; αν δεν έχουν τίποτα κοινό πρεπει να φέρεις όλους τους server και όλα τα applications εφόσον μιλάμε για simulated full outer join . Στο ερώτημα σου εδω έχουμε many to many relationship. Δηλαδή ένας server μπορεί να έχει πολλά applications και ένα application μπορεί να είναι σε πολλούς server. Σε αυτή την περίπτωση χρησιμοποιείς Junction table
tabos23 Δημοσ. 22 Ιανουαρίου 2015 Μέλος Δημοσ. 22 Ιανουαρίου 2015 Ναι ναι φυσικά και υπάρχει junction table.Σας επισυνάπτω μια εικόνα για να δείτε ακριβώς πως είναι η σχέση των tables.Προσπάθησα όλα όσα γράψατε αλλα δεν μου βγάζει αποτελέσματα. Μου βγάζει ότι υπάρχει πρόβλημα στην from.Ευχαριστώ για τι βοήθεια... Ελπίζω να βοηθήσει η εικόνα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα