ďťż
 
SELECT dla INNER JOIN (warunek) ďťż
 
SELECT dla INNER JOIN (warunek)
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • radioaktywni.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com