Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
rang
HV kasutaja

liitunud: 21.03.2005
|
11.10.2010 13:25:10
Mysql vali kõik read, mis on kasutusel teises tabelis |
|
|
Väike lihtne küsimus, kuidas saada kätte ühest tabelist kõik need read, mis on kasutusel teises tabelis?
Proovisin LEFT JOIN-i kasutada, kuid see ei käitunud nii, nagu oleks vaja, sest teises tabelis on esimese tabeli väärtusi mitmel korral.
Kui veidi detailsemaks minna, siis on mul kategooriate tabel ja toodete tabel. Mul on vaja kuvada kõik kategooriad, mis sisaldavad tooteid.
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
mirko28
Aeg maha 1p

liitunud: 31.12.2003
|
11.10.2010 15:23:32
|
|
|
Seonduva vahe-teemana küsisin Oracle-foorumist, mida soovitatakse rohkem, kas "DISTINCT join"-i või "EXISTS (correlated subquery)" klauslit:
http://forums.oracle.com/forums/message.jspa?messageID=6505129
Kui kellelgi on miskit selle kohta lisada, siis saab teema-algataja küsimuse najal sellest teemast ka siin arutada.
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
rang
HV kasutaja

liitunud: 21.03.2005
|
11.10.2010 17:10:29
|
|
|
Ma ei saa ikka hakkama.
Seletan siis lähemalt, mida ma üritan teha: mul on kolm tabelit
1. kategooriate tabel, kus on id ja kategooria nimi,
2. toodete tabel, mis sisaldab kõiki tooteid ja kus kasutatakse kategooria ID-d,
3. toodete tabel, kus asuvad kasutajatele näidatavate toodete ID-d
Kolmandast tabelist ei tulnud ennem pähe rääkida, nüüd juhuslikult torkas pähe mõte, et see on ka oluline. Selles tabelis on tooted, mida näidatakse kasutajatele. Mul on vaja kuvada vaid need kategooriad, milles on tooted ja nende ID-d asuvad kolmandas tabelis.
Iseenesest võiks teha eraldi päringutega asja ära, kuid see tundub olema veidi ebaeffektiivne, ning võiks ka vahelduseks keerulisema variandi õppimise eesmärgil valida.
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
rang
HV kasutaja

liitunud: 21.03.2005
|
11.10.2010 18:02:13
|
|
|
hakkas tööle jah. Tänan.
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
11.10.2010 22:13:10
|
|
|
estrose kirjutas: |
Seonduva vahe-teemana küsisin Oracle-foorumist, mida soovitatakse rohkem, kas "DISTINCT join"-i või "EXISTS (correlated subquery)" klauslit:
http://forums.oracle.com/forums/message.jspa?messageID=6505129
Kui kellelgi on miskit selle kohta lisada, siis saab teema-algataja küsimuse najal sellest teemast ka siin arutada. |
Oleneb! Exists lause executitakse baasis "FOR" tsükli baasil ja sealt tulenevalt oleneb performance põhiquery ja subquerys olevate tabelite mahtudest ja indeksitest(kus tehakse full scan ja kus minnakse üle indeksi). Siin ei ole otsest vastust ning tõde tuleb ilmsiks sqlplusi ja autotrace abil - proovi erinevaid variante ja vaata plaani, saad aru mis toimub ja mida eelistada(muuta)
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
mirko28
Aeg maha 1p

liitunud: 31.12.2003
|
14.10.2010 16:50:23
|
|
|
SELECT DISTINCT k.id FROM kategooria AS k, toode AS t WHERE t.kat_id = k.id
|
versus
SELECT DISTINCT t.kat_id FROM kategooria AS k, toode AS t WHERE t.kat_id = k.id
|
Kumba neist soovitate ja miks?
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
14.10.2010 18:05:54
|
|
|
Andmebaasimootorite sügavamat hingeelu ei tunne, seega ei hakka jõudluse koha pealt arvamust avaldama, kuhu kasutaja estrose ilmselt oma küsimusega sihib.
Küll aga ütleks ära, et antud juhul teemaalgataja kontekstis eelistaks ilmselt esimest varianti, kus päritakse andmeid kategooria tabelist, sest eeldatavasti tahetakse kategooria kohta ka muud teada peale id ning vajalikud väljad saab sama päringuga välja võtta. Antud juhul näites pärisin ainult id ilma pikemalt mõtlemata, samahästi oleks võinud pärida k.* tegelikult - lõppkokkuvõttes teemaalgataja kohendab päringu enda vajadustele vastavaks nii ehk naa.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
kullar
HV kasutaja

liitunud: 26.11.2006
|
14.10.2010 18:43:07
|
|
|
Miks ei kasuta inner joini? See ju tunduvalt kiirem ja DISTINCT on aeglasem kui GROUB BY
sql:
|
SELECT k.id FROM kategooria AS k INNRER JOIN toode AS t k.kat_id = t.kat_id INNER JOIN avalik_toode AS a ON a.toode_id = t.toode_id GROUP BY k.ID
|
Lisaks peaks andmebaasis olema ka vastavad indeksid.
_________________ Online Perekonna Eelarve, Keerukamad veebipõhised infosüsteemid jms |
|
Kommentaarid: 27 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
25 |
|
tagasi üles |
|
 |
mirko28
Aeg maha 1p

liitunud: 31.12.2003
|
14.10.2010 19:02:52
|
|
|
Fukiku kirjutas: |
eeldatavasti tahetakse kategooria kohta ka muud teada peale id ning vajalikud väljad saab sama päringuga välja võtta. |
Ilmselt küll. Vastasel juhul kui vaid ID-d on vaja, sest siis saaks päringu teha ka ilma JOINIita.
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
|