Προς το περιεχόμενο

MS Access Query


Shorin

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα. Μπαίνω στο θέμα κατευθείαν.

 

Έχω μία βάση σε Access η οποία περιλαμβάνει 2 πίνακες.

 

Στον πρώτο πίνακα έχω π.χ. κάποια προϊόντα για PC με τις ονομασίες τους, την τιμή, και τον κωδικό που τα έχω καταχωρημένα.

 

Στον 2ο πίνακα έχω το όνομα του προϊόντος των κωδικό και κάποιες άλλες πληροφορίες.

 

Θέλω λοιπόν να φτιάξω ένα Query που θα παίρνει τις τιμές δλδ τα ονόματα από τον πρώτο πίνακα (ονόματα των προϊόντων), θα τα συνδέει με τον 2ο και θα εμφανίζει τα στοιχεία για κάθε προϊον...

 

Θα δίνω για παράδειγμα "modem" ως search string και θα μου βγάζει μια λίστα με όλα τα προϊόντα που ξεκινούν από την λέξη "modem" και όχι ότι υπάρχει και κάτω από αυτήν (π.χ. "printer") και με click στο στοιχείο της λίστας να εμφανίζονται οι επιπλέον πληροφορίες για το προϊόν αυτο...

 

 

Μήπως ζητάω πολλά...Sorry πάντως και thanks προκαταβολικά...

Δημοσ.

Για να εμφανίσεις στοιχεία από δύο πίνακες χρησιμοποίησε κάτι σαν το παρακάτω

 

SELECT table1.column1, table1.column2, table2.column1, table2.column4

FROM ATable table1, AnotherTable table2

WHERE table1.id=table2.id

AND table1.product LIKE '%modem%'

 

Η εναλλακτική λύση που έχεις είναι να κάνεις ένα JOIN ή ένα UNION

 

Αυτό θα σου επιστρέψει ένα σύνολο με όλα τε δεδομένα που θα ταιριάζουνε στα παραπάνω κριτήρια. Θα πρέπει από εκεί και πέρα να τα επεξεργαστείς και να εμφανίσεις με τον κατάλληλο τρόπο.

Δημοσ.

Εγώ θα σου πρότεινα φιλαράκι να δοκιμάσεις αυτό το query:

 

SELECT table1.column1, table1.column2, table2.column1, table2.column4

FROM ATable table1, AnotherTable table2

WHERE table1.product LIKE '%modem%'

AND table1.id=table2.id

 

Αν έχεις πολλά δεδομένα ειδικά, θα παρατηρήσεις ότι είναι πολύ πιο γρήγορο όταν δίνεις πρώτα την συνθήκη αναζήτησης και μετά τις συνθήκες του join!

 

(Sorry φίλε Γηρυόνη :) )

Δημοσ.

Αν έχεις πολλά δεδομένα ειδικά, θα παρατηρήσεις ότι είναι πολύ πιο γρήγορο όταν δίνεις πρώτα την συνθήκη αναζήτησης και μετά τις συνθήκες του join!

 

Αυτό που λες δεν είναι απόλυτο!!

 

Πχ, στη συγκεκριμένη περίπτωση που η συνθήκη είναι

> LIKE '%modem%' 

δεν υπάρχει περίπτωση να είναι πιο γρήγορο. Όσο πιο πολλά είναι τα δεδομένα, τόσο περισσότερο θα αργεί το query...

 

Μία ψήφος στον Γηρυόνης από εμένα :D :D

Δημοσ.

Εξακολουθώ να διαφωνώ...

Αυτό που λες θα ίσχυε αν έκανε αναζήτηση π.χ.

> like '%a%' 

Αν και πάλι παίζεται...

 

Φαντάσου ας πούμε να έχεις 2 πίνακες με 100 rows ο καθένας, στην δική σου την περίπτωση θα κάνει αναζήτηση σε 100 * 100 = 10000 rows (όσο και το καρτεσιανό γινόμενό τους, (μη συμπεριλαμβανομένου του join) ή στις στήλες του join, οι οποίες πάλι είναι πολύ περισσότερες από 100 φυσικά! ), ενώ στην δική μου, θα κάνει αναζητήση στον 1ο πίνακα μόνο (100 rows) και μετά θα κάνει join με τα αποτελέσματα της αναζήτησης ΚΑΙ ΜΟΝΟ ΑΥΤΑ!

 

Όποιος δεν συμφωνεί ας κάνει δοκιμές και ας μου πει!

Δημοσ.

patrick, έχεις διαβάσει ποτέ πώς δουλεύουν τα indices και τί ρόλο παίζουν στις αναζητήσεις?

Έχεις τρέξει ποτέ query με like σε πραγματικά μεγάλο όγκο δεδομένων (και βέβαια, τί σημαίνει για σένα πραγματικά μεγάλος όγκος?)

 

Τέσπα, έχουμε δύο διαφορετικές απόψεις και δεν έχει νόημα να τις υπερασπιστούμε, αφού μόνο οι δοκιμές θα δείξουν τί ακριβώς συμβαίνει (συν ότι πλέον έχουμε ξεφύγει εκτός θέματος).

Δημοσ.

εχω την εντύπωση πως είναι ακόμα πιο γρήγορ να δώσεις το Join με Join και όχι με συνθήκη ελέγχου ...

  • 2 εβδομάδες αργότερα...
Δημοσ.
Εγώ θα σου πρότεινα φιλαράκι να δοκιμάσεις αυτό το query:

 

SELECT table1.column1' date=' table1.column2, table2.column1, table2.column4

FROM ATable table1, AnotherTable table2

WHERE table1.product LIKE '%modem%'

AND table1.id=table2.id

 

Αν έχεις πολλά δεδομένα ειδικά, θα παρατηρήσεις ότι είναι πολύ πιο γρήγορο όταν δίνεις πρώτα την συνθήκη αναζήτησης και μετά τις συνθήκες του join!

 

(Sorry φίλε Γηρυόνη :) )[/quote']

 

Make it work first and optimize later :wink:

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...