Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
#1 · Zasláno: 10. 7. 2007, 23:38:08 · Upravil/a: Kcko
<offtopic>
Me by zajimalo jak resit toto produkty_kategorie ================ id_produktu | id_kategorie 1 | 2 1 | 70 2 | 2 3 | 70 4 | 2 4 | 70 vybrat vsechy produkty z teto tabulky ktere se vyskytuji v kategoriich 2 a 70 ( v obou soucasne ) </offtopic> Cili vysledkem selectu musi byt tyto hodnoty 1 a 4 :) Prisel sem na toto:
Nelze to nejak fikaneji? |
||
LVD Profil * |
#2 · Zasláno: 10. 7. 2007, 23:45:13
Nelze.
|
||
MzM Profil |
#3 · Zasláno: 11. 7. 2007, 08:55:57 · Upravil/a: MzM
jednak je to blbě a jednak mě neustále udivuje, jak někdo může napsat, že to nejde lépe i když to lépe jde. (ááá to jsem zase krásně hnusný)...
Předkládaný select vybere všechny výrobky kteréjsou v jedné NEBO druhé kategorii, tzn. nevyhovuje zadání. Takže jsme s Kckem došli na to, že rozumné (nikoli nejleší pro všechny případy) bude pro každý produkt ve where ověřit jestli existuje v dané kategorii. Něco jako select * from produkt where exists(select product_id from produkty_kategorie where id_kategorie = 2) and exists(select product_id from produkty_kategorie where id_kategorie = 70) Někdo by mohl namítnout, že by bylo lepší spíš tvořit join-y. Ale pokud se bude kategorie dynamicky měnit (3 kategorie, 6 - kategoriií, ...), tak se to bude jednak hůř generovat (to je samozřejmně chabý argument), ale podle mě se bude pomalejii selectovat. Pro exists se vyhodnotí první, co nevyhovuje a na zbytek se nesáhne (zkrácené vyhodnocování podmínek). (jsem se zase vykecal.. :-) ) .... a největš průůů....er je, když tohle je taky blbě... v těch vnořených selectech musí být ještě podmínka na ten konkrétní výrobek. |
||
Kajman_ Profil * |
#4 · Zasláno: 11. 7. 2007, 09:31:51
MzM
které jsou v jedné NEBO druhé kategorii To by tam nesmělo být to having (ale je nutné, aby ty dva sloupečky měly jedinečný klíč nebo dát do count distinct id_kategorie). |
||
MzM Profil |
#5 · Zasláno: 11. 7. 2007, 09:54:21
jj, taky na to koukám, holt nejsem neomylný.. :-)
|
||
Kcko Profil |
#6 · Zasláno: 11. 7. 2007, 10:00:43
MzM Exists mi nefunguje, vybira vsechno
Kajman_neco rychlejsiho , smysluplnejsiho? |
||
Kajman_ Profil * |
#7 · Zasláno: 11. 7. 2007, 10:01:03
když tohle je taky blbě
ale jenom o kousek select * from produkt where produkt_id in (select product_id from produkty_kategorie where id_kategorie = 2) and produkt_id in (select product_id from produkty_kategorie where id_kategorie = 70) Těžko říct, co bude rychlejší. |
||
Kcko Profil |
#8 · Zasláno: 11. 7. 2007, 10:15:16
Je to o neco pomalejsi nez ten muj prvni dotaz
diky zamykam vlakno |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0