[MySql] - jedna tabela, dwa aliasy w zapytaniu
x_piter - 21-04-2006 00:28
[MySql] - jedna tabela, dwa aliasy w zapytaniu
Mam tabelkę z danymi jak poniżej (dwie kolumny)
Nazwa | Wartość A | 1 A | 2 B | 1 B | 2 B | 3
Chcę jednym zapytaniem wydostać wartość dla nazwy B taką której nie ma dla nazwy A, czyli chce dostac rekord B | 3. Coś podobnego jak zapytanie wybierające z danej tabeli rekordy których nie ma w innej tabeli po danym kluczu. Tyle tylko, że tutaj dane mam w jednej tabeli.
Próbowałem czegoś takiego: SELECT tab_B.wartosc FROM tabela tab_B left join tabela tab_A ON tab_B.wartosc = tab_A.wartosc WHERE tab_A.wartosc IS NULL and tab_A.nazwa = A and tab_A.nazwa = B
bez rezultatu. Czy (i jak) da się to jakoś zrobić w MySQL-u (4.1.18) ? Czy MySQL udostępnia operacje na zbiorach danych, w ORACLE jest 'minus', , jest jakiś odpowiednik w MySQL-u?
Pozdrawiam
Grzegorz Danowski - 21-04-2006 00:28
Użytkownik "x_piter" <x_piter@interia.pl> napisał w wiadomości news:44479b4b$0$8047$f69f905@mamut2.aster.pl... > Mam tabelkę z danymi jak poniżej (dwie kolumny) > > Nazwa | Wartość > A | 1 > A | 2 > B | 1 > B | 2 > B | 3 > > Chcę jednym zapytaniem wydostać wartość dla nazwy B taką której nie ma dla > nazwy A, czyli chce dostac rekord B | 3. > Coś podobnego jak zapytanie wybierające z danej tabeli rekordy których nie > ma w innej tabeli po danym kluczu. > Tyle tylko, że tutaj dane mam w jednej tabeli. > > Próbowałem czegoś takiego: > SELECT tab_B.wartosc > FROM tabela tab_B > left join tabela tab_A ON tab_B.wartosc = tab_A.wartosc > WHERE tab_A.wartosc IS NULL and > tab_A.nazwa = A and > tab_A.nazwa = B > > bez rezultatu.
Na pierwszy rzut oka widać, że pomieszałeś kilka rzeczy: zły kierunek Left Joinam, dałeś warunek, który nigdy nie może być spełniony, bo jest sprzeczny (tab_A.wartosc IS NULL and tab_A.nazwa = A and tab_A.nazwa = B), no i nie dałeś nazw A i B w cudzysłowiu (a przecież nie są to nazwy kolumn, lecz ich wartości).
Zamiast tego spróbuj Exists:
Select * From tabela tab_B Where nazwa = 'B' And Not Exists( Select * -- spróbuj też z 1, może My lepiej to zoptymalizuje From tabela As tab_A Where tab_A.nazwa = 'A' And tab_B.wartosc = tab_A.wartosc)
Pozdrawiam Grzegorz
Ps. Pisane z palca i nietestowane
keczerad - 21-04-2006 00:28
x_piter napisał(a): > Mam tabelkę z danymi jak poniżej (dwie kolumny) > > Nazwa | Wartość > A | 1 > A | 2 > B | 1 > B | 2 > B | 3 > > Chcę jednym zapytaniem wydostać wartość dla nazwy B taką której nie ma > dla nazwy A, czyli chce dostac rekord B | 3. > Coś podobnego jak zapytanie wybierające z danej tabeli rekordy których > nie ma w innej tabeli po danym kluczu. > Tyle tylko, że tutaj dane mam w jednej tabeli. > > Próbowałem czegoś takiego: > SELECT tab_B.wartosc > FROM tabela tab_B > left join tabela tab_A ON tab_B.wartosc = tab_A.wartosc > WHERE tab_A.wartosc IS NULL and > tab_A.nazwa = A and > tab_A.nazwa = B >
select * from testowa a Where (Select Count(name) from testowa b Where b.value=a.value and b.name<>a.name) =0
moze tak bedzie dobrze
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 21-04-2006 00:28
Użytkownik x_piter napisał: > Mam tabelkę z danymi jak poniżej (dwie kolumny) > > Nazwa | Wartość > A | 1 > A | 2 > B | 1 > B | 2 > B | 3 > > Chcę jednym zapytaniem wydostać wartość dla nazwy B taką której nie ma > dla nazwy A, czyli chce dostac rekord B | 3. > Coś podobnego jak zapytanie wybierające z danej tabeli rekordy których > nie ma w innej tabeli po danym kluczu. > Tyle tylko, że tutaj dane mam w jednej tabeli. > > Próbowałem czegoś takiego: > SELECT tab_B.wartosc > FROM tabela tab_B > left join tabela tab_A ON tab_B.wartosc = tab_A.wartosc > WHERE tab_A.wartosc IS NULL and Poniższe też muszą muszą być w klauzuli ON > tab_A.nazwa = A and > tab_A.nazwa = B a tu chyba tab_B?
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
zanotowane.pldoc.pisz.plpdf.pisz.plquentinho.opx.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 |
|