Posted By: Jovo () on 'CZdatabases' Title: Jovo1 Date: Wed Sep 20 19:02:00 2000 Z Jovova zapisniku - 1:"Jak nevybrat vubec nic" =============================================== Jak zajistit, aby dany SELECT nevybral vubec nic ? Budete se divit, ale obcas se to hodi. Nasel jsem par moznosti: 1) SELECT .... WHERE 1=0 2) SELECT .... WHERE klic IS NULL 3) SELECT .... WHERE rowid IS NULL 4) vytvoreni prazdne tabulky a SELECT na ni. 5) SELECT .... WHERE klic IN (SELECT co nic nevybere a nevaze se na "vrchni" tabulku) 6) SELECT .... WHERE id = 0 ad [1] Logicke a vzdy fungujici. Ma to jen jednu vadu : kdyz je spatne nastaveny DB stroj (popripade stroj neumi optimalizace), tak se muze stat, ze na velkych tabulkach to trva moc dlouho. Problem je vetsinou v tom, ze DB stroj nevyhodnoti 1=0 jako konstantni vyraz, ale projde celou tabulku a na kazdy radek aplikuje 1=0 a ted ceka, jestli mu to nahodou nebude sedet :-) Pokud mate v tabulce milion polozek, tak si uzijete. ad [2] Parada. I pokud mame blby stroj z bodu [1], tak to funguje celkem rychle, zvlast kdyz kazdy poradny clovek dela nad klicem index. Vada je, kdyz je klic slozeny, nebo ho tabulka vubec nema (-> klic - vsechny sloupce). ad [3] Tak toto by melo zabrat vzdy a na jakemkoli databazovem stroji. praxe ovsem zaznamenala pripady, kdy tento zpusob zpusobi (hezke slovni spojeni, ze ? :-) na nekterych DB pad samotneho DB stroje. Dokonce nastaly pripady, kdy stroj na jedne platforme (treba HP) jel a na druhe (treba SGI) vzdy spadnul. ad [4] Idealni reseni. Sice je tu rezie navic, ale vzdy to funguje ... krome pripadu, kdy si nemuzeme sahnout na klauzuli SELECT, ktera se preda nekam dal (muzeme sahat pouze na WHERE, FROM). Da se spojit i tabulka s prazdnou tabulkou. Slusne nastaveny stroj s tim nema problem, ale jeden nikdy nevi. ad [5] Da se pouzit, kdyz nemuzeme manipulovat klauzule FROM. Jinak plati totez, co u bodu (4). ad [6] Lze pouzit pouze, ma li tabulka sloupec id typu serial. Plati vse, popsane u (2). Co delat, kdyz muzete manipulovat pouze sekci WHERE, tabulka ma milion a dva radky, nema klic a zpusob s rowid shodi masinu a administrator neco prehledl v konfiguraci, popripade sam DB stroj je tupoun ? Ne ze by u nas nebyli sikovni kluci, ale nas DB stroj se chova jako v bodech (1),(3) a tak zatim pouzivame reseni (2). Ma nekdo nejaky dalsi napad ? Me z toho zatim vyplyva, ze at delas, co delas, nekdy je vsechno na pytel :-) Vas Jovo.