Jak zbudowac zapytanie do bazy?
Przemek - 11-05-2007 12:33
Jak zbudowac zapytanie do bazy?
Witam
tabela1: kolumna1 kolumna2 kolumna3 1 1 1 1 2 2 1 3 2 1 4 2 1 5 2 2 1 1 2 2 1 2 3 2 2 4 2 2 5 2 1 1 2 1 2 2 1 3 2 1 4 2 1 5 2
Chce dostac: 1 1 2 1 2 2 1 3 2 1 4 2 1 5 2
Czyli: Jezeli w kolumnie3 mamy wartosc "1" w wierszu, gdzie kolumna2 ma wartosc "1", to wywalamy wszystkie wartosci z kolumna 1.
SELECT * FROM tabela1 WHERE kolumna1=1
da mi tylko: 1 1 1 2 1 1 1 1 2
Chcialbym zapytanie cos w stylu: SELECT * FROM tabela1 WHERE (wywal kolumna1, gdzie w kolumna2=1 jest kolumna3=1)
Ale jak to zapisac?:)
Pozdrawiam
=?ISO-8859-2?Q?Adam_P=B3aszczyca?= - 11-05-2007 12:33
On Wed, 9 May 2007 18:40:15 +0200, "Przemek" <mystre[bez_tego]@wp.pl> wrote:
>Czyli: >Jezeli w kolumnie3 mamy wartosc "1" w wierszu, gdzie kolumna2 ma wartosc >"1", >to wywalamy wszystkie wartosci z kolumna 1.
>Ale jak to zapisac?:)
Dobrze....
A niech tam, dzień dobroci dla leni.
Select kolumna1 from tabela1 where kolumna2=1 and kolumna3=1 \ -- ___________ (R) /_ _______ Adam 'Trzypion' Płaszczyca (+48 502) 122 688 ___/ /_ ___ ul. Na Szaniec 23/70 31-560 Kraków (012 378 31 98) _______/ /_ http://trzypion.oldfield.org.pl/wieliczka/foto.html ___________/ mail: _555@irc.pl GG: 3524356
Przemek - 11-05-2007 12:33
Użytkownik "Adam Płaszczyca" <trzypion@oldfield.spamnie.org.pl> napisał w wiadomości news:c65443h56pf43u4qjgp1149hlt4031t13o@4ax.com... > On Wed, 9 May 2007 18:40:15 +0200, "Przemek" <mystre[bez_tego]@wp.pl> > wrote: > >>Czyli: >>Jezeli w kolumnie3 mamy wartosc "1" w wierszu, gdzie kolumna2 ma wartosc >>"1", >>to wywalamy wszystkie wartosci z kolumna 1. > >>Ale jak to zapisac?:) > > Dobrze....
Aha...
> A niech tam, dzień dobroci dla leni. > > Select kolumna1 from tabela1 where kolumna2=1 and kolumna3=1
Zle!
Dostane to: kolumna1 kolumna2 kolumna3 1 1 1 2 1 1
A to nie to co chcialem...
Chce dostac: 1 1 2 1 2 2 1 3 2 1 4 2 1 5 2
Select kolumna1 from tabela1 where kolumna2=1 and kolumna3!=1 nie rozwiaze problemu bo dostane to: 1 1 2 Czyli tylko 1 wiersz, ze tego co chce dostac.
Chce wywalic: kolumna1 kolumna2 kolumna3 1 1 1 1 2 2 1 3 2 1 4 2 1 5 2 2 1 1 2 2 1 2 3 2 2 4 2 2 5 2 bo w kolumna1 jest "1" przy pozycji kolumna2=1.
Patrz dokaldnie... Jak w kolumnie3 jest liczba!=1 ale tylko gdy kolumna2 ma wartosc 2, to chce zachowac wszystkie 5 wierszy kolumna1, kolumna2, kolumna3. W przeciwnym wypadku, wywalic wszystkie te wiersze.
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 11-05-2007 12:33
Przemek wrote: > Witam > > tabela1: > kolumna1 kolumna2 kolumna3 > 1 1 1 > 1 2 2 > 1 3 2 > 1 4 2 > 1 5 2 > 2 1 1 > 2 2 1 > 2 3 2 > 2 4 2 > 2 5 2 > 1 1 2 > 1 2 2 > 1 3 2 > 1 4 2 > 1 5 2 > > Chce dostac: > 1 1 2 > 1 2 2 > 1 3 2 > 1 4 2 > 1 5 2
Select * from tab where kolumna1 = 1 and kolumna3 !=1
> Czyli: > Jezeli w kolumnie3 mamy wartosc "1" w wierszu, gdzie kolumna2 ma wartosc > "1",
Chodzi Ci o zdanie napisane po polsku: Jeżeli w kolumnie3 mamy wartość '1' i kolumnie2 wartość '1'
> to wywalamy wszystkie wartosci z kolumna 1.
To co robimy? Z punktu widzenia baz danych to zdanie nie ma sensu. Żadnego!
> SELECT * > FROM tabela1 > WHERE kolumna1=1 > > da mi tylko: > 1 1 1 > 2 1 1 ^^^ - przecież to nie spełnia warunku we WHERE!!! > 1 1 2 > > Chcialbym zapytanie cos w stylu: > SELECT * > FROM tabela1 > WHERE (wywal kolumna1, gdzie w kolumna2=1 jest kolumna3=1) > > Ale jak to zapisac?:)
Nie masz problemu z zapisem warunku. Ty masz problem ze zdefiniowaniem problemu!
P.S. Masz jakiś problem X, upraszczasz go do problemu Y, po czym opisujesz go w emailu E. Czyli masz coś takiego:
X->Y->E
Z powyższego postu wynika, że Y->E nie potrafisz zrobić, więc z dużym prawdopodobieństwem X->Y też spaprałeś. Pewnie po kilku postach dojdziemy o co Ci chodzi w Y, ale nie przybliży Cię to do rozwiązania problemu X, na którym Ci zależy. :)
-- P.M.
=?ISO-8859-2?Q?Adam_P=B3aszczyca?= - 11-05-2007 12:33
On Wed, 9 May 2007 21:24:57 +0200, "Przemek" <mystre[bez_tego]@wp.pl> wrote:
> >Zle!
No to się doucz sam. -- ___________ (R) /_ _______ Adam 'Trzypion' Płaszczyca (+48 502) 122688 ___/ /_ ___ ul. Na Szaniec 23/70, 31-560 Kraków, (012) 3783198 _______/ /_ http://trzypion.oldfield.org.pl/wieliczka/ ___________/ GG: 3524356
=?ISO-8859-2?Q?Adam_P=B3aszczyca?= - 11-05-2007 12:33
On Thu, 10 May 2007 03:23:35 +0200, Paweł Matejski <madej@spam.madej.pl.eu.org> wrote:
> >Z powyższego postu wynika, że Y->E nie potrafisz zrobić, więc z dużym >prawdopodobieństwem X->Y też spaprałeś. Pewnie po kilku postach dojdziemy o co >Ci chodzi w Y, ale nie przybliży Cię to do rozwiązania problemu X, na którym Ci >zależy. :)
http://rtfm.killfile.pl -- ___________ (R) /_ _______ Adam 'Trzypion' Płaszczyca (+48 502) 122688 ___/ /_ ___ ul. Na Szaniec 23/70, 31-560 Kraków, (012) 3783198 _______/ /_ http://trzypion.oldfield.org.pl/wieliczka/ ___________/ GG: 3524356
Marcin - 13-05-2007 00:18
Przemek napisał(a):
> Chce dostac: > ... > 1 2 2 > ... > i > Chce wywalic: > ... > 1 2 2 > ...
No to weź się zastanów....
Czym dla bazy wg ciebie różnią się te dwa wiersze - inaczej mówiąc: jak chcesz jej powiedzieć, który wiersz ma wywalić, a który zostawić
Przemek - 13-05-2007 00:18
>> SELECT * >> FROM tabela1 >> WHERE kolumna1=1 >> >> da mi tylko: >> 1 1 1 >> 2 1 1 > ^^^ - przecież to nie spełnia warunku we WHERE!!! >> 1 1 2 >> >> Chcialbym zapytanie cos w stylu: >> SELECT * >> FROM tabela1 >> WHERE (wywal kolumna1, gdzie w kolumna2=1 jest kolumna3=1) >> >> Ale jak to zapisac?:) > > Nie masz problemu z zapisem warunku. Ty masz problem ze zdefiniowaniem > problemu! > > P.S. Masz jakiś problem X, upraszczasz go do problemu Y, po czym opisujesz > go w > emailu E. Czyli masz coś takiego: > > X->Y->E > > Z powyższego postu wynika, że Y->E nie potrafisz zrobić, więc z dużym > prawdopodobieństwem X->Y też spaprałeś. Pewnie po kilku postach dojdziemy > o co > Ci chodzi w Y, ale nie przybliży Cię to do rozwiązania problemu X, na > którym Ci > zależy. :) > > -- > P.M.
Napisalem co mam w tabeli, a pod spodem, co chce z niej uzyskac. Tak otworzysz oczy i zobaczysz, co jest w tabeli, to zrozumiesz o co chodzi, bez opisu. Jezeli nie chce Ci sie wnikac, to nie trac czasu... Przeciez nie kazalem Ci odpisywac. Ale, jak Cie bardzo urazilem tym postem, to przepraszam.
Przemek - 13-05-2007 00:18
Użytkownik "Adam Płaszczyca" <trzypion@oldfield.spamnie.org.pl> napisał w wiadomości news:sbj543thks9rpiq34ouere75o6gdd22qqn@4ax.com... > On Wed, 9 May 2007 21:24:57 +0200, "Przemek" <mystre[bez_tego]@wp.pl> > wrote: > >> >>Zle! > > No to się doucz sam. > --
Dziekuje, za konstrukrywna odpowiedz. Udalo Ci sie zablysnac.
keczerad - 13-05-2007 00:25
Przemek napisał(a): >>> WHERE (wywal kolumna1, gdzie w kolumna2=1 jest kolumna3=1)
kolumna2<>1 and kolumna<>1
powinno byc dobrze chociaz nie jestem pewien czy cie rozumiem i ze kontrukcja bazy danych jest nie do zaakcepotowania.
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML wraz z modulem do Subiekta GT
hubert depesz lubaczewski - 14-05-2007 00:03
On 2007-05-12, Przemek <mystre> wrote: > Dziekuje, za konstrukrywna odpowiedz. > Udalo Ci sie zablysnac.
przeczytaj swoje zadanie. powoli. zrozumiałeś je? nie wiem - moze tak, ale z tego co widzę to wszyscy mają ten problem, że nie rozumieją o co ci chodzi. napisz po ludzku. nie używaj określeń "wywalić" bo nic one nie znaczą. co znaczy "wywalić"? wywalić na ekran? wywalić z wyniku? wywalić komputer?
podaj *sensowny* przykład danych i co chcesz uzyskać. opisz algorytm wybrania tego co chcesz (nie pokazuj kodu sql, bo sorry, ale to co pokazujesz tylko i wyłącznie dodatkowo zaciemnia).
i weź pod uwagę, że jeśli tyle osób pisze, że coś z twoim pytaniem jest źle, to może faktycznie coś niezbyt jasno napisałeś?
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
Przemek - 14-05-2007 00:03
Użytkownik "keczerad" <keczerad@poczta.fm> napisał w wiadomości news:f25est$527$1@mx1.internetia.pl... > Przemek napisał(a): >>>> WHERE (wywal kolumna1, gdzie w kolumna2=1 jest kolumna3=1) > > kolumna2<>1 and kolumna<>1 > > powinno byc dobrze chociaz nie jestem pewien czy cie rozumiem i ze > kontrukcja bazy danych jest nie do zaakcepotowania. > > -- > > keczerad > > http://www.e-mo.com.pl > sklep w (X)HTML wraz z modulem do Subiekta GT
Mam: > kolumna1 kolumna2 kolumna3 > 1 1 1 <-TU > 1 2 2 > 1 3 2 > 1 4 2 > 1 5 2 > 2 1 2 <- Tu juz ok > 2 2 1 > 2 3 2 > 2 4 2 > 2 5 2
W kolumna1 sa dwie grupy 1 i 2, kazda po piec wpisow. Te grupy sobie dalej rosna...3, 4, 5... Niektore moga miec wiecej lub mniej niz 5 wpisow. Chodzi o to, aby wyeliminowac te grupy w ktorych, kolumna3=1, ale tylko przy kolumna2=1. Powyzsze zapytania, albo wyswietla mi tylko 1 wiersz z grupy, albo wywala tylko 1 wiersz.
Mysle, ze nie da sie tego zrobic bez GROUP BY tego co jest w kolumna1.
hubert depesz lubaczewski - 14-05-2007 00:03
On 2007-05-13, Przemek <mystre> wrote: > Mam: >> kolumna1 kolumna2 kolumna3 >> 1 1 1 <-TU >> 1 2 2 >> 1 3 2 >> 1 4 2 >> 1 5 2 >> 2 1 2 <- Tu juz ok >> 2 2 1 >> 2 3 2 >> 2 4 2 >> 2 5 2 > W kolumna1 sa dwie grupy 1 i 2, kazda po piec wpisow. > Te grupy sobie dalej rosna...3, 4, 5... > Niektore moga miec wiecej lub mniej niz 5 wpisow. > Chodzi o to, aby wyeliminowac te grupy w ktorych, > kolumna3=1, ale tylko przy kolumna2=1. > Powyzsze zapytania, albo wyswietla mi tylko 1 wiersz z grupy, > albo wywala tylko 1 wiersz. > Mysle, ze nie da sie tego zrobic bez GROUP BY > tego co jest w kolumna1.
ooo wreszcie opis który (prawie) rozumiem. group by się nie przyda.
jeśli dobrze zrozumiałem to to zapytanie powinno załatwić sprawę:>
select * from tabelka t1 where not exists (select * tabelka t2 where t2.kolumna2 = 1 and t2.kolumna3=1 and t2.kolumna1 = t1.kolumna1);
wymaga existsa - czyli podzapytań.
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
keczerad - 14-05-2007 00:03
hubert depesz lubaczewski napisał(a):
> select * from tabelka t1 where not exists (select * tabelka t2 where > t2.kolumna2 = 1 and t2.kolumna3=1 and t2.kolumna1 = t1.kolumna1); > > wymaga existsa - czyli podzapytań.
tak na oko to mozna jeszcze uzyc left joina i sprawdzac nulla
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML wraz z modulem do Subiekta GT
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 14-05-2007 00:20
keczerad wrote: > hubert depesz lubaczewski napisał(a): > >> select * from tabelka t1 where not exists (select * tabelka t2 where >> t2.kolumna2 = 1 and t2.kolumna3=1 and t2.kolumna1 = t1.kolumna1); >> >> wymaga existsa - czyli podzapytań. > > tak na oko to mozna jeszcze uzyc left joina i sprawdzac nulla
A na moje oko wystarczy warunek: WHERE kolumna2 != 1 OR (kolumna2 = 1 AND kolumna3 != 1)
-- P.M.
hubert depesz lubaczewski - 15-05-2007 00:08
On 2007-05-13, Paweł Matejski <madej@spam.madej.pl.eu.org> wrote: > A na moje oko wystarczy warunek: > WHERE kolumna2 != 1 OR (kolumna2 = 1 AND kolumna3 != 1)
chyba nie, bo w/g mnie pytającemu chodziło o to by nie zwracać całych "grup" (w/g kolumna1). a nie tylko pojedynczych rekordów.
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 15-05-2007 00:08
hubert depesz lubaczewski wrote: > On 2007-05-13, Paweł Matejski <madej@spam.madej.pl.eu.org> wrote: >> A na moje oko wystarczy warunek: >> WHERE kolumna2 != 1 OR (kolumna2 = 1 AND kolumna3 != 1) > > chyba nie, bo w/g mnie pytającemu chodziło o to by nie zwracać całych > "grup" (w/g kolumna1). a nie tylko pojedynczych rekordów.
Faktycznie. Nie będę wnikał o co chodziło koledze, ale poczuwam się do winy, że nie zauważyłem tego efektu w Twoim zapytaniu...
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
mecze sie i mecze i nic - zapytanie czesciowe
zanotowane.pldoc.pisz.plpdf.pisz.plmarcelq.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|