Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » Problem mit SQl Statement

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.09.2004, 09:42 Uhr
aklaeser



Hie hab folgendes SQl-Statement:


Code:
SELECT ID, IDArtist, IDAlbum, SongTitle FROM Songs


mein Problem ist jetzt in IDArtist und IDAlbum steht nur ein Verweis auf ne andere Tabelle z.B 2201 oder so und jetzt will ich dass dort icht der Verweis sondern der Wert aus der Tabelle steht z.B. Artistxyz, wie geht das?

Danke schon mal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.09.2004, 10:08 Uhr
mike
Pinguinhüpfer
(Operator)


Meinst du sowas?

Code:
SELECT m.ID,n.IDArtist,n.IDAlbum FROM Songs m LEFT JOIN 2201 n ON m.ID = n.ID;



Das ist ein Outer Join (SQL92). Er berrücksichtigt Innkonsistenzen der Tabelle n. Verglichen wird jeweiles der Primärschlüssel ID.
Dei Frage lautet nun: Wie ist 2201 aufgebaut? In welchem "Zusammenhang" steht sie mit Tabelle Songs?

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.09.2004, 10:21 Uhr
aklaeser



Würde das dann so aussehen?


Code:
SELECT m.ID, n.IDArtist, n.IDAlbum, SongTitle FROM Songs m LEFT JOIN Artists n ON m.ID = n.ID



Das geht aber nicht!?

Meine Tabelle Artists ist so aufgebaut gibt ne Spalte "ID", "Artist" und "Comment" und will nur die Spalte mit Artist haben, weil dort der Name drin Steht das Album kann man auch erst mal weglassen!

Dieser Post wurde am 13.09.2004 um 10:25 Uhr von aklaeser editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.09.2004, 13:18 Uhr
aklaeser



DANKE!!!!!!!!!!!

Funktioniert!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.09.2004, 13:26 Uhr
aklaeser



Wie sieht das jetzt aus wenn ich noch eine weiter Tabelle hinzufügen möchte z.B. Album, vielleicht so:


Code:
SELECT s.ID, s.SongTitle, a.Artist b.Album FROM Songs s RIGHT JOIN Artists a ON s.IDArtist = a.ID, RIGHT JOIN Albums b ON s.IDALBUM = a.ID


Ich habs mit der SELECT-Anweisung gemacht:


Code:
SELECT s.SongTitle, (SELECT Artist FROM Artists WHERE ID = s.IDArtist) as Artist,
(SELECT Album FROM Albums WHERE ID = s.IDAlbum) as Album FROM songs s


Würd mich aber trotzdem noch interessieren wies mit der JOIN-Anweisung geht!

Dieser Post wurde am 13.09.2004 um 13:45 Uhr von aklaeser editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.09.2004, 14:21 Uhr
mike
Pinguinhüpfer
(Operator)


Hmm. Eventuell wäre ein VIEW hier anzuwenden.
Ansonsten müsste
(RIGHT JOIN table ON bla = bla),(RIGHT JOIN table ON bla = bla)
gehen.

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: