Page 1 of 1

Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 3:53 pm
by rexes
Καλησπέρα συνάδελφοι! Μια ερώτηση!

Η βάση Α έχει table -> OptionsTable και το Column "OptionsColumn"
Η βάση Β έχει το table -> Lessons και το Column "Lesson_titles"

Γίνεται λοιπόν να γράψω κάτι τέτοιο->SELECT * FROM Lessons WHERE Lesson_Titles IN (SELECT * FROM OptionsTable) ;

Ευχαριστώ εκ των προτέρων!

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 4:26 pm
by nachos
Δεν ξέρω για Sqlite συγκεκριμένα, αλλά γενικά (π.χ. MS Sql Server, MySql) κάτι τέτοιο είναι εφικτό. To query που θα πρέπει να γράψεις θα πρέπει να είναι κάπως έτσι:

Code: Select all

SELECT ls.*
FROM db1.schema1.Lessons ls INNER JOIN db2.schema2.OptionsColumn opt ON ls.Lesson_Titles = opt.Lesson_Titles
Προφανώς ο πίνακας OptionsColumn που ανέφερες πρέπει να περιέχει το αντίστοιχο του πεδίου Lesson_Titles. Αν το όνομα του πεδίου διαφέρει, το μετονομάζεις αντίστοιχα στο query.

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 4:29 pm
by rexes
nachos wrote:Δεν ξέρω για Sqlite συγκεκριμένα, αλλά γενικά (π.χ. MS Sql Server, MySql) κάτι τέτοιο είναι εφικτό. To query που θα πρέπει να γράψεις θα πρέπει να είναι κάπως έτσι:

Code: Select all

SELECT ls.*
FROM db1.schema1.Lessons ls INNER JOIN db2.schema2.OptionsColumn opt ON ls.Lesson_Titles = opt.Lesson_Titles
Προφανώς ο πίνακας OptionsColumn που ανέφερες πρέπει να περιέχει το αντίστοιχο του πεδίου Lesson_Titles. Αν το όνομα του πεδίου διαφέρει, το μετονομάζεις αντίστοιχα στο query.

Δεν καταλαβαίνω τι εννοείς!! :P Το ls.* και το db1.schema1 τι είναι;

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 4:37 pm
by nachos
Tα ls και opt αντίστοχα είναι τα alias names για τους δύο πίνακες. Τα χρησιμοποιούμε ώστε να συντομεύουμε (συνήθως) τις αναφορές στους πίνακες (κοινώς για να μη ξαναγράφουμε όλο το όνομά τους που είναι πιο μακρυνάρι). Συνεπώς, το ls.* είναι η επιλογή όλων των πεδίων του ls (δηλαδή του πίνακα Lessons)

To db1.schema1 είναι το prefix του full qualified name του πίνακα, δηλαδή το όνομα της βάσης δεδομένων στην οποία ανήκει (έστω db1) και το schema της βάσης στο οποίο έχει καταχωρηθεί (έστω schema1). Αν δεν είχες προσδιορίσει schema στις create table εντολές που χρησιμοποίησες για να κατασκευάσεις τους πίνακες σου, τότε αυτοί αυτόματα τοποθετούνται στο default schema. Στον MS Sql Server π.χ. to default schema είναι το 'dbo'. Για την Sqlite δυστυχώς δε γνωρίζω πως ονομάζεται.


=============================================================================================================

Επειδή έχω μια υποψία ότι και τα δυο tables είναι στην ίδια database και απλά έκανες σαρδαμ στο αρχικό ποστ ( :-p ), αυτή είναι η revised έκδοση του query που πρέπει να τρέξεις:

Code: Select all

SELECT ls.*
FROM Lessons ls INNER JOIN OptionsColumn opt ON ls.Lesson_Titles = opt.Lesson_Titles
Δοκίμασέ το και πες μου!

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 5:10 pm
by X-ray
nachos wrote:
Επειδή έχω μια υποψία ότι και τα δυο tables είναι στην ίδια database και απλά έκανες σαρδαμ στο αρχικό ποστ ( :-p ), αυτή είναι η revised έκδοση του query που πρέπει να τρέξεις:

Code: Select all

SELECT ls.*
FROM Lessons ls INNER JOIN OptionsColumn opt ON ls.Lesson_Titles = opt.Lesson_Titles
Δοκίμασέ το και πες μου!
Αν το OptionsColumn είναι όντως Column τότε:

Code: Select all

Select ls.*
From Lessons ls, OptionsTable opt
Where ls.Lesson_Titles=opt.OptionsColumn

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 5:13 pm
by rexes
όχι δεν είναι στην ίδια βάση. Είναι 2 διαφορετικές βάσεις! Επίσης δοκιμάζω να κάνω Attach τώρα γιατί δεν γίνεται τίποτα!

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 5:20 pm
by X-ray
Λοιπόν το έψαξα λίγο.

έστω database1 εκεί που είναι ο Lessons
και 2 η άλλη

Code: Select all

attach database database1.db as db1;
attach database database2.db as db2;

SELECT *
FROM db1.Lessons ls INNER JOIN db2.OptionsTable opt ON ls.Lesson_Titles = opt.OptionsColumn
EDIT: και δεν χρειάζεσαι μάλλον καν Select ls.* σκέτο Select * θα κάνει.

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 5:34 pm
by ala_mages
X-ray wrote:Λοιπόν το έψαξα λίγο.
translation : google "join tables from two different databases sqlite" , paste here first stackoverflow answer
Spoiler: εμφάνιση/απόκρυψη
για το χαβαλέ man :-D , no offence

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 5:51 pm
by X-ray
ala_mages wrote:
X-ray wrote:Λοιπόν το έψαξα λίγο.
translation : google "join tables from two different databases sqlite" , paste here first stackoverflow answer
Spoiler: εμφάνιση/απόκρυψη
για το χαβαλέ man :-D , no offence
χαχα όχι απευθείας stackoverflow.
Google is for noobs. :-D
Ε κοίτα ο μόνος λόγος που το έψαξα είναι για το Attach..
Το υπόλοιπο είναι πάνω κάτω η πρώτη μου απάντηση.

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 6:16 pm
by rexes
Δεν μου βγήκε κάτι από τα παραπάνω θα το κάνω με άλλο τρόπο !! όπως το είχα πριν και δούλευε μια χαρά :P Ευχαριστώ για το χρόνο σας !!!

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 8:00 pm
by nachos
Thnx στον X-Ray για τη διόρθωση, προφανώς είχα μπερδέψει το όνομα του πίνακα OptionsTable!
rexes wrote:Δεν μου βγήκε κάτι από τα παραπάνω θα το κάνω με άλλο τρόπο !! όπως το είχα πριν και δούλευε μια χαρά :P Ευχαριστώ για το χρόνο σας !!!
Αν σου "έπαιζε" το αρχικό query που πόσταρες:
rexes wrote:SELECT * FROM Lessons WHERE Lesson_Titles IN (SELECT * FROM OptionsTable)
τότε είναι αδύνατον να μην σου παίζει και αυτό:

Code: Select all

SELECT ls.*
FROM Lessons ls INNER JOIN OptionsTable opt ON ls.Lesson_Titles = opt.OptionsColumn
Καλύτερα να προτιμήσεις τη 2η έκδοση του query, καθώς το αρχικό είναι εξαιρετικά inefficient.

Re: Χρήση Query(a) μέσα σε Query(b) (SQLite)

Posted: Thu Oct 18, 2012 8:55 pm
by rexes
Δεν είπα ότι μου έπαιζε, απλά ρώτησα αν γίνεται κάτι τέτοιο!