SELECT dla INNER JOIN (warunek)
`ronin - 04-09-2007 00:08
SELECT dla INNER JOIN (warunek)
Witam,
Baza danych to MySQL. Dla tabel:
CREATE TABLE Plyty ( Id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, Autor TEXT, Tytul TEXT, Kategoria INTEGER );
CREATE TABLE Kategorie ( Id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, Nazwa TEXT );
Mam takie oto zapytanie listujace wszystkie albumy muzyczne w bazie:
SELECT Autor, Tytul, Nazwa FROM Plyty INNER JOIN Kategorie ON Plyty.Kategoria = Kategorie.Id;
W przypadku braku w tabeli "Kategorie" pozycji o numerze ID zgodnym z "Plyty.Kategorie.Id" (brak takiej kategorii lub zostala usunieta) zapytanie zwroci pusty wiesz dla danej płyty. Chcialbym, aby w takim przypadku zapytanie zwróciło pola "Plyta.Autor", "Plyta.Tytul" oraz pole "Kategorie.Nazwa" ustawione na "brak kategorii".
Sytuacja taka ma miejsce, gdy kategoria zostala usunieta przez uzytkownika, natomiast przy tworzeniu wpisu w tabeli Plyty kategoria istniala. Interesuje mnie modyfikacja samego zapytania SELECT z jakims warunkiem IF jesli to jest mozliwe.
Nie jestem mocny z baz danych dlatego proszę o poradę.
-- Pozdrawiam Marcin
mojeza - 04-09-2007 00:08
> Mam takie oto zapytanie listujace wszystkie albumy muzyczne w bazie: > > SELECT Autor, Tytul, Nazwa FROM Plyty INNER JOIN Kategorie ON > Plyty.Kategoria = Kategorie.Id; Wylistuje wszyskie rekordy tylko gdy Kategoria w tabeli Plyty ma odpowiednik w tabeli Kategorie.
> W przypadku braku w tabeli "Kategorie" pozycji o numerze ID zgodnym z > "Plyty.Kategorie.Id" (brak takiej kategorii lub zostala usunieta) zapytanie > zwroci pusty wiesz dla danej płyty. Nie zwroci pustego wiersza, chyba ze zastosujes LEFT JOIN zamiast INNER JOIN
> Chcialbym, aby w takim przypadku zapytanie zwróciło pola "Plyta.Autor", > "Plyta.Tytul" oraz pole "Kategorie.Nazwa" ustawione na "brak kategorii". SELECT p.Autor, p.Tytul, CASE WHEN k.Nazwa IS NULL THEN 'brak kategorii' ELSE k.Nazwa END CASE AS Kategoria FROM Plyty p LEFT JOIN Kategorie k ON p.Kategoria = k.Id
Zamiast CASE mozesz zastosowac IFNULL: SELECT p.Autor, p.Tytul, IFNULL(k.Nazwa, 'brak kategorii') AS Kategoria FROM Plyty p LEFT JOIN Kategorie k ON p.Kategoria = k.Id
`ronin - 04-09-2007 00:08
Witam,
Użytkownik "mojeza" <najyer@hotmail.com> napisał w wiadomości >> Mam takie oto zapytanie listujace wszystkie albumy muzyczne w bazie: >> >> SELECT Autor, Tytul, Nazwa FROM Plyty INNER JOIN Kategorie ON >> Plyty.Kategoria = Kategorie.Id; >Wylistuje wszyskie rekordy tylko gdy Kategoria w tabeli Plyty ma >odpowiednik w tabeli Kategorie.
>> W przypadku braku w tabeli "Kategorie" pozycji o numerze ID zgodnym z >> "Plyty.Kategorie.Id" (brak takiej kategorii lub zostala usunieta) >> zapytanie >> zwroci pusty wiesz dla danej płyty. >Nie zwroci pustego wiersza, chyba ze zastosujes LEFT JOIN zamiast >INNER JOIN
>> Chcialbym, aby w takim przypadku zapytanie zwróciło pola "Plyta.Autor", >> "Plyta.Tytul" oraz pole "Kategorie.Nazwa" ustawione na "brak kategorii". >SELECT > p.Autor, > p.Tytul, > CASE > WHEN k.Nazwa IS NULL THEN 'brak kategorii' ELSE k.Nazwa > END CASE AS Kategoria >FROM Plyty p > LEFT JOIN Kategorie k ON p.Kategoria = k.Id
>Zamiast CASE mozesz zastosowac IFNULL: >SELECT > p.Autor, > p.Tytul, > IFNULL(k.Nazwa, 'brak kategorii') AS Kategoria >FROM Plyty p > LEFT JOIN Kategorie k ON p.Kategoria = k.Id
Super, o to mi wlasnie chodzilo. Dziekuje bardzo i pozdrawiam
-- Pozdrawiam Marcin
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[help] Illustrator CS - =?ISO-8859-2?Q?znikn=B1=B3_Selection_?==?ISO-8859-2?Q?Tool_=28V=29?=
[mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu.
SELECT MAX(nazwaPola) FROM tabela WHERE .... i ORA-01405: pobran? warto?ci? kolumny jest NULL
=?iso-8859-2?q?select_sum_i_dwie_tabele..._b=B3=EAdna_agregac ja?=
=?iso-8859-2?Q?=5BMySql=5D_-_select_po_5_rekordow_mniejssych_i_wi=EAkszych?=
=?iso-8859-2?Q?=5BMySql=5D_Select_wed=B3ug_nazwy_pola?=
=?ISO-8859-2?Q?[mysql]_Nie_potrafi=EA_zgrupowa=E6_selecta_(proste)?=
=?ISO-8859-2?Q?[MS_SQL]_update_wielu_p=F3l_na_raz_z_selecta?=
Wstawianie nowego wiersza w przypadku jego braku podczas SELECT w PostgreSQL
[pgsql] jak =?ISO-8859-2?Q?zrobi=E6_taki_select_=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plradioaktywni.htw.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 |
|