← Uz sākumu

Oracle

2004. gada 28. janvārī, 16 komentāri

MySQL'am, Postgresam un vēl iespējams šim tam ir daiļa nestandarta konstrukcija LIMIT from, how much

Piem., iekš Oracle šādas lietas nav. Taču, viens daiļš selekts prot to imitēt.

SELECT * FROM (
  SELECT * FROM (
    SELECT * FROM (
      SELECT * FROM (
        SELECT 
         order-key, 
         data-values 
        FROM 
          table 
        ORDER BY 
          order-key DESC
      ) WHERE rownum <= max-limit
    ) ORDER BY order-key ASC
  ) WHERE rownum <= min-limit
) ORDER BY order-key DESC

Pie kam, iesaku ar šo rownum uzmanīties. Elfz iepointoja, ka jamo var salīdzināt tikai ar < vai <=. Piem., SELECT COUNT(lauks) FROM table WHERE rownum > 1 vai SELECT COUNT(lauks) FROM table WHERE rownum >= 2 atgriezīs 0 pat tad, ja tabulā ir dikti daudz ierakstu.

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar hm

2004. gada 28. janvārī, plkst. 11:44

varbuut shitaa ir labaak? select * from (select rownum rownum1, doc_rsn from tw1_document) where rownum1>10 and rownum1<20

shitas buus baigais DB hits ganjau... bet es nezinu kas ir sliktaak tie 5 selekti vai shie 2...

Gravatar DazzleWand

2004. gada 28. janvārī, plkst. 12:04

Ņja ... dazji labi Oracle "guru" šo to sliktu pateiktu par piecu līmeņu subselectu ...

Gravatar sorehead

2004. gada 28. janvārī, plkst. 13:04

oracle ir speciāls vaicājumu optimizācijas rīks, ar kuru tad arī ir iespējams pārbaudīt, kurš no vaicājumiem izpildās ātrāk (tas protams ir vesels kurss priekšmētā DBVS, bet nu tomēr, iespēja pastāv)..

Gravatar hm

2004. gada 28. janvārī, plkst. 13:27

var arii pastiities execution plaanu ar visiem laikiem ;]

Gravatar Jāzeps

2004. gada 28. janvārī, plkst. 13:45

A kāpēc tie ORACLE veidotāji neuzveido tādu pašu?

Gravatar whateva

2004. gada 28. janvārī, plkst. 13:51

SELECT num, info FROM (SELECT ROWNUM num, info FROM (SELECT info FROM some_table ORDER BY info)) WHERE num BETWEEN 2 AND 10

shitaa var ar nedaudz mazaak subselectiem to pashu dabuut

Gravatar whateva

2004. gada 28. janvārī, plkst. 13:53

pie tam explain plans uzraada, ka tas ir ap 3x lapaaks nekaa ar 5 subselectiem

Gravatar Tigers

2004. gada 28. janvārī, plkst. 13:56

Ar rownumu viss būtu kulē, ja viņš to ieraksta numuru piemestu pēc tam, kad resultsets ir noorderēts. Bet to viņš izdarīt nevar, rezultātā nākas šitā dilsties. Hm variants liekas vienkāršāks, bet tais fullscan visai tabulai.

Gravatar whateva

2004. gada 28. janvārī, plkst. 14:03

bet protams, jo tak saorderēt vajag. uzliec indexu un būs ok :P

Gravatar endrju

2004. gada 28. janvārī, plkst. 17:37

Es paklusēšu... Oracle speciālisti...

Gravatar laacz

2004. gada 28. janvārī, plkst. 17:39

endrju:

a) Kurš teica, ka speciālisti, izņemot Tevi? (Paldies par komplimentu) b) Paklusē gan, nespeciālist :)

Gravatar endrju

2004. gada 29. janvārī, plkst. 09:27

Nestreso laacz ;-) Paranoja, ka visi vēl ļaunu vai brauc augumā? Da beidz... tas nav manā stilā.

Gravatar Livingston

2004. gada 30. janvārī, plkst. 16:13

Njā, ta ir Subselektu Kings no visiem, ko esmu redzējis :)

  1. komentārā bija pareizā atbilde gadījumiem, ja nevajag sortēt
  2. komentā variants ar sortēšanu

Abi krietni īsāki par to murgu :)

Gravatar whateva

2004. gada 30. janvārī, plkst. 17:23

to tad esi veel maz redzeejis, ja tas ir subselectu kings :D lai gan raxtot vienkaarshi selectu no ashpadsmittabulaam var to pashu uzraxtiit ar subselectiem, depends on tabulu, ierakstu skaitu un indexiem

Gravatar Livingston

2004. gada 30. janvārī, plkst. 17:42

Nu redzējis es esmu ļoti daudz, bet kings tas ir tādēļ, ka dara TIK elementāru lietu TIK samudrītā veidā.

Ir nācies redzēt arī gana daudz konstrukcijas

select .. where kaut_kas in (select .. where kaut_kas in (select .. where kaut_kas in (select .. where kaut_kas in (select .. where kaut_kas in

utt.

Bet tam selektam arī uzdevums bija nedaudz nopietnāks. Bet vienalga smieklīgi, ņemot vērā, ka to kodu rakstīja profesionāļi.

Gravatar whateva

2004. gada 30. janvārī, plkst. 17:59

bivajet, ka triviālām lietām meklējam superbuper sarežgītus risinājumus, pašam tā ir bijis :)