hilpers


  hilpers > comp.* > comp.bazy-danych > 09/2007

 #1  
03.09.2007, 14:36
`ronin
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ę.
 #2  
03.09.2007, 15:14
mojeza
> 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
 #3  
03.09.2007, 15:40
`ronin
Witam,

Użytkownik "mojeza" <najyer> 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
Podobne wątki
MySQL SELECT warunek w WHERE

Jak napisać warunek: SELECT kolumna1, kolumna2, kolumna3 FROM tabela WHERE kolumna1 <> "0" LIMIT 150 jak napisać warunek WHERE aby wyświetliło wszystko z wyjątkiem...

[JPA] Join i warunek złączenia

Witam Chciałbym wykonać złączenie dwóch encji w JPA, ale pod warunkiem nieco bardziej rozbudowanym niż zwykłe bycie w relacji. Konkretny przykład: mamy tabele: - dostawców...

JPA i Select z INNER JOIN

Witam Probuje wykonac zapytanie Select wraz ze zlaczeniem INNER JOIN na 2 tabelach. Wzor ze strony [..] a zapytanie SQL to: SELECT Deklaracja.IDDeklaracja,...

różnice w. select z join

Cześć. Przypuśćmy, że mam 3 tabele: tab. a (np. 1000 rekordów): - id (primary key) - name (varchar unique) tab. b (np. 1000 rekordów): -id (primary key)

select, laczenie, warunek - pytanie teoretyczne o wydajnosc

Witam mam takie male pytanie, przypuscmy ze mamy dwie tabele tabela1 ID - primary key (inne pola) tabela2 ID - primay key


Czasy w strefie GMT. Teraz jest 07:27. | Privacy Policy