003
13.09.2004, 13:03 Uhr
mike
Pinguinhüpfer (Operator)
|
Hi! ID, IDArtist, IDAlbum, SongTitle .........| Beziehung .........ID, Artist, Comment
Folgendes Bsp. (PostgreSQL 7.4): Erzeugen der Tabelle
Code: |
webmike=> CREATE TABLE songs (ID SERIAL PRIMARY KEY,IDArtist int4,IDAlbum int4, SongTitle text); NOTICE: CREATE TABLE will create implicit sequence "songs_id_seq" for "serial" column "songs.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "songs_pkey" for table "songs" CREATE TABLE webmike=> CREATE TABLE artist (ID SERIAL PRIMARY KEY,Artist text,Comment text); NOTICE: CREATE TABLE will create implicit sequence "artist_id_seq" for "serial" column "artist.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "artist_pkey" for table "artist" CREATE TABLE
|
Dann die Tabellen mit Daten füllen.
Code: |
webmike=> INSERT INTO songs (IDArtist,IDAlbum,SongTitle) VALUES(1,1,'We will Rock You'); INSERT 66081 1 webmike=> INSERT INTO songs (IDArtist,IDAlbum,SongTitle) VALUES(2,2,'Who are u'); INSERT 66104 1 webmike=> INSERT INTO artist (Artist,Comment) VALUES('Queen','Rock band'); INSERT 66082 1
|
Nun kannst du auswählen:
Code: |
webmike=> SELECT s.SongTitle,(SELECT Artist FROM artist WHERE ID = s.IDArtist) as Artist FROM songs s; songtitle | artist ------------------+-------- We will Rock You | Queen Who are u | (2 rows)
|
"Who are You" ist ein Song, aber hat keinen Artist zugeordnet. Willst du das nicht anzeigen, musst du z.B. (expression [, expression ...]) IN (subquery) nutzen. Das ganze geht aber auch einfacher:
Code: |
webmike=> SELECT s.SongTitle,a.Artist FROM songs s LEFT JOIN artist a ON s.IDArtist = a.ID; songtitle | artist ------------------+-------- We will Rock You | Queen Who are u | (2 rows)
webmike=> SELECT s.SongTitle,a.Artist FROM songs s RIGHT JOIN artist a ON s.IDArtist = a.ID; songtitle | artist ------------------+-------- We will Rock You | Queen (1 row)
|
Hier siehst du den Unterschied Left und Right Join. "Who are you" hat keinen Artist - also wird es beim RIGHT JOIN nicht angezeigt - bei LEFT JOIN aber schon.
So würde ichs machen - bin aber auch kein SQL Guru
mfg --
Dieser Post wurde am 13.09.2004 um 13:06 Uhr von mike editiert. |