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

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
rexes
Kilobyte level
Kilobyte level
Posts: 397
Joined: Wed Sep 21, 2011 8:22 pm
Academic status: 3rd year
Gender:
Location: SomeWhere

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

Post by rexes » Thu Oct 18, 2012 3:53 pm

Καλησπέρα συνάδελφοι! Μια ερώτηση!

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

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

Ευχαριστώ εκ των προτέρων!
Last edited by rexes on Thu Oct 18, 2012 4:27 pm, edited 1 time in total.
Εφαρμογή για το Πρόγραμμα του Οικονομικού Πανεπιστημίου Αθηνών
Image
Δείτε περισσότερα για την εφαρμογή και πείτε την άποψή σας!
User avatar
nachos
Gbyte level
Gbyte level
Posts: 1252
Joined: Mon Aug 21, 2006 4:28 pm
Academic status: Alumnus/a
Gender:
Location: Brachamee City

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

Post by nachos » Thu Oct 18, 2012 4:26 pm

Δεν ξέρω για 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.
Nothing is impossible for the man who doesn't have to do it himself
User avatar
rexes
Kilobyte level
Kilobyte level
Posts: 397
Joined: Wed Sep 21, 2011 8:22 pm
Academic status: 3rd year
Gender:
Location: SomeWhere

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

Post by rexes » Thu Oct 18, 2012 4:29 pm

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 τι είναι;
Εφαρμογή για το Πρόγραμμα του Οικονομικού Πανεπιστημίου Αθηνών
Image
Δείτε περισσότερα για την εφαρμογή και πείτε την άποψή σας!
User avatar
nachos
Gbyte level
Gbyte level
Posts: 1252
Joined: Mon Aug 21, 2006 4:28 pm
Academic status: Alumnus/a
Gender:
Location: Brachamee City

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

Post by nachos » Thu Oct 18, 2012 4:37 pm

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
Δοκίμασέ το και πες μου!
Nothing is impossible for the man who doesn't have to do it himself
User avatar
X-ray
Mbyte level
Mbyte level
Posts: 854
Joined: Tue Aug 29, 2006 2:09 pm
Academic status: Alumnus/a
Gender:
Contact:

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

Post by X-ray » Thu Oct 18, 2012 5:10 pm

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
shrinked image
User avatar
rexes
Kilobyte level
Kilobyte level
Posts: 397
Joined: Wed Sep 21, 2011 8:22 pm
Academic status: 3rd year
Gender:
Location: SomeWhere

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

Post by rexes » Thu Oct 18, 2012 5:13 pm

όχι δεν είναι στην ίδια βάση. Είναι 2 διαφορετικές βάσεις! Επίσης δοκιμάζω να κάνω Attach τώρα γιατί δεν γίνεται τίποτα!
Εφαρμογή για το Πρόγραμμα του Οικονομικού Πανεπιστημίου Αθηνών
Image
Δείτε περισσότερα για την εφαρμογή και πείτε την άποψή σας!
User avatar
X-ray
Mbyte level
Mbyte level
Posts: 854
Joined: Tue Aug 29, 2006 2:09 pm
Academic status: Alumnus/a
Gender:
Contact:

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

Post by X-ray » Thu Oct 18, 2012 5:20 pm

Λοιπόν το έψαξα λίγο.

έστω 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 * θα κάνει.
shrinked image
User avatar
ala_mages
Gbyte level
Gbyte level
Posts: 1489
Joined: Sun Jun 06, 2010 7:04 pm
Academic status: N>4
Gender:

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

Post by ala_mages » Thu Oct 18, 2012 5:34 pm

X-ray wrote:Λοιπόν το έψαξα λίγο.
translation : google "join tables from two different databases sqlite" , paste here first stackoverflow answer
Spoiler: εμφάνιση/απόκρυψη
για το χαβαλέ man :-D , no offence
Mpomp is building an army.
░░░░░███████ ]▄▄▄▄▄▄▄▄
▂▄▅█████████▅▄▃▂ ______☻/︻╦╤─
Il███████████████████]. /▌
_◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙◤.. _ / \
Spoiler: εμφάνιση/απόκρυψη
Welcome to the [url=http://www.youtube.com/watch?feature=player_detailpage&v=pAY9CNkKOsg#t=59]ricefields[/url] mathaf*ka [url=http://foss.aueb.gr]Turn on the foss please![/url]
User avatar
X-ray
Mbyte level
Mbyte level
Posts: 854
Joined: Tue Aug 29, 2006 2:09 pm
Academic status: Alumnus/a
Gender:
Contact:

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

Post by X-ray » Thu Oct 18, 2012 5:51 pm

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..
Το υπόλοιπο είναι πάνω κάτω η πρώτη μου απάντηση.
shrinked image
User avatar
rexes
Kilobyte level
Kilobyte level
Posts: 397
Joined: Wed Sep 21, 2011 8:22 pm
Academic status: 3rd year
Gender:
Location: SomeWhere

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

Post by rexes » Thu Oct 18, 2012 6:16 pm

Δεν μου βγήκε κάτι από τα παραπάνω θα το κάνω με άλλο τρόπο !! όπως το είχα πριν και δούλευε μια χαρά :P Ευχαριστώ για το χρόνο σας !!!
Εφαρμογή για το Πρόγραμμα του Οικονομικού Πανεπιστημίου Αθηνών
Image
Δείτε περισσότερα για την εφαρμογή και πείτε την άποψή σας!
User avatar
nachos
Gbyte level
Gbyte level
Posts: 1252
Joined: Mon Aug 21, 2006 4:28 pm
Academic status: Alumnus/a
Gender:
Location: Brachamee City

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

Post by nachos » Thu Oct 18, 2012 8:00 pm

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.
Nothing is impossible for the man who doesn't have to do it himself
User avatar
rexes
Kilobyte level
Kilobyte level
Posts: 397
Joined: Wed Sep 21, 2011 8:22 pm
Academic status: 3rd year
Gender:
Location: SomeWhere

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

Post by rexes » Thu Oct 18, 2012 8:55 pm

Δεν είπα ότι μου έπαιζε, απλά ρώτησα αν γίνεται κάτι τέτοιο!
Εφαρμογή για το Πρόγραμμα του Οικονομικού Πανεπιστημίου Αθηνών
Image
Δείτε περισσότερα για την εφαρμογή και πείτε την άποψή σας!
Post Reply

Return to “Προγραμματισμός”