Απορία SQL

Antonis Christofides anthony at itia.ntua.gr
Mon Feb 7 11:12:16 EET 2011


CREATE TABLE wiki_page(
id INTEGER NOT NULL PRIMARY KEY,
"name" VARCHAR(100) NOT NULL
);

CREATE TABLE wiki_pageversion(
page INTEGER NOT NULL REFERENCES wiki_page(id),
version_number INTEGER NOT NULL,
content TEXT NOT NULL,
CONSTRAINT pk PRIMARY KEY (page, version_number)
);

Η «τρέχουσα» έκδοση μιας σελίδας είναι αυτή που έχει το μέγιστο
version_number.

Ζητείται: Ένα query που να επιστρέφει όλες τις τρέχουσες εκδόσεις
(δηλαδή την τρέχουσα έκδοση για κάθε σελίδα).

Ενώ αυτό το query είναι εφικτό:

SELECT * FROM wiki_pageversion v1 WHERE version_number IN
(SELECT MAX(version_number) FROM wiki_pageversion v2
WHERE v2.page=v1.page)

αναρωτιέμαι το κατά πόσον είναι RDBMS-specific το να τρέχει
αποτελεσματικά (δηλαδή κατά πόσο μπορώ να εμπιστευτώ τον εκάστοτε
optimizer [γιατί προσπαθώ να φτιάξω κάτι που να είναι cross-RDBMS] ότι
θα καταφέρει να το τρέξει γρήγορα, εφόσον έχει το index που
χρειάζεται).

Θα μπορούσα φυσικά να είμαι σίγουρος αν προσέθετα ένα πεδίο current
στο wiki_pageversion, αλλά μισώ το redundancy. Υπάρχει άλλος τρόπος;



More information about the Linux-greek-users mailing list