Re: SQL Anfängerfrage
Geizhals » Forum » Programmierung » SQL Anfängerfrage (10 Beiträge, 420 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
SQL Anfängerfrage
04.03.2017, 19:54:12
Abend, ich hab eine SQL Anfängerfrage. Da ich Anfänger bin hoffe ich mal das ich überhaupt in der Lage bin alle Infos zu geben die nötig sind um meine Frage zu beantworten.

Ich hab mir div Beispiele angeschaut, Video2Brain Video angeschaut, klappt auch alles ganz gut solange man mit den Beispieldatenbanken arbeitet - die wohl so ausgelegt sind das alles recht einfach und übersichtlich bleibt und keine großen Probleme auftreten.

Ich will nun aber mit einer vorhandenen Datenbank ein bissl rumspielen und habe Probleme div Beispiele auf diese meine Datenbank "umzulegen" und ich hoffe ihr könnt mir dabei etwas helfen.



Was will / habe ich:


Ich habe zwei Tabellen, eine nennt sich "Slides", eine weitere nennt sich "Protocols".

In der Slides Tabelle sehe ich welche Slides mit welchem Protokoll abgearbeitet wurden wobei das Protokoll nur mit seiner "ProtokollID" angezeigt wird die natürlich wenig aussagt da es sich einfach um eine Nummer handelt.

In der Protocols Tabelle sehe ich die ProtokollIDs und die dazugehörigen, realen, Namen der Protokolle.


Ich würde aber nun gerne eine Abfrage erstellen die bei jedem Slide die realen Protokollnamen und die Protokoll IDs aus beiden Tabellen anzeigt.

Ich will nun also die Tabelle SLIDES mit der Tabellen PROTOKOLLS verbinden und alle Slides in Verbindung mit dem Realnamen der verwendeten Protokolle sichtbar machen.

Also habe ich mir gedacht (und lacht nun bitte nicht, eh scho wissen, Anfänger) ich verwende INNER JOIN.




Folgende Abfrage habe ich nun erstellt:

SELECT PC.ProtocolID AS 'ProtocolID aus Protocols-Tabelle'
            SL.ProtocolID AS 'ProtocolID aus Slides-Tabelle'
            PC.Name
FROM    Slides.Slide SL INNER JOIN Protocols.Protocol PC ON SL.ProtocolID = Name



So, die Fehlermeldung:

Conversion failed when converting from a a character string to uniqueidentifier.


verwendete Datentypen

Die "ProtocolID" in der Slides.Slide Tabelle hat als Datentyp "uniqueidentifier".
Die "ProtocolID" in der Protocols.Protocol Tabelle hat als Datentyp "uniqueidentifier".
Der "Name" in der Tabelle Protocols.Protocol hat als Datentyp "nvarchar(50)


Ist meine Angabe soweit  verständlich das meine Frage beantwortet werden kann oder fehlen Informationen? Was muss ich nun wo eingeben um mein Ziel zu erreichen? Ist meine Angabe verständlich?









04.03.2017, 19:56 Uhr - Editiert von User545539, alte Version: hier
Antworten PM Alle Chronologisch
 
Melden nicht möglich
.  Re: SQL Anfängerfrage
 (TuxTux am 04.03.2017, 19:59:43)
..  Re(2): SQL Anfängerfrage
 (User545539 am 04.03.2017, 20:01:50)
...  Re(3): SQL Anfängerfrage  (TuxTux am 05.03.2017, 11:01:35)
.
Re: SQL Anfängerfrage
04.03.2017, 20:08:08
Du bist auf dem richtigen Weg.

Beginne beim SQL Statement nicht mit dem SELECT (das machst du als allerletztes) sondern mit dem FROM. Beginnen wir:

FROM Slides.Slide .. ok, ich nehme an du willst die Slides Tabelle, also nehmen wir auch nur die

-> FROM Slides sl (sl ist dabei der Alias über den wir die Tabelle ansprechen könnten; er ist jedoch optional und zum besseren verständnis lassen wir ihn mal weg)
-> INNER JOIN passt (NULLs sollen weggeworfen werden bzw. es gibt wahrscheinlich eh keine)

Womit wollen wir die Tabelle Slides Joinen? Mit Protocols, also

-> FROM Slides INNER JOIN Protocols

Und über welches Attribut hängen nun die beiden Tabellen zusammen. Lt. deiner Aussage müsste das die Spalte ProtocolId sein (die heißt offensichtlich in beiden Tabellen gleich)

-> FROM Slides INNER JOIN Protocols ON Slides.ProtocolId = Protocols.ProtocolId

So, das JOIN ist jetzt vollständig, jetzt widmen wir uns dem SELECT. Was man dazu wissen muss: Bei einem JOIN wird immer das Kreuzprodukt gebildet ("alles mal alles"), d.h. du bekommst eine rieeeeesige Tabelle, die durch das "ON" wieder reduziert wird (natürlich macht das SQL Server schon etwas schlauer). D.h. in unserem Set das wir jetzt haben, haben wir alle Spalten von allen Tabellen - wir suchen uns nun nur noch aus, welche wir brauchen: Protocol.Name

SELECT Protocols.Name, Protocols.ProtocolId, Slides.SlideId

(Das Slides.SlideId habe ich jetzt mal hinzugenommen, du willst doch sicher auch was aus der Slides Tabelle anzeigen lassen, sonst wäre das JOIN ja sinnlos).

Wir basteln das Ganze also zusammen:

SELECT Protocols.Name, Protocols.ProtocolId, Slides.SlideId
FROM Slides INNER JOIN Protocols ON Slides.ProtocolId = Protocols.ProtocolId

im Inner Join siehst du jetzt auch dass die beiden Spalten die verglichen werden denselben Datentyp haben (uniqueidentifier).

Wenn der Sturm losbricht,
verstummen die Einen vor Schrecken,
und die Anderen breiten, einem Adler gleich, die Flügel aus
und schwingen sich empor.

Herzlichen Dank an Raydoo für die Fotos

Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
..  Re(2): SQL Anfängerfrage  (User545539 am 04.03.2017, 20:17:22)
...  Re(3): SQL Anfängerfrage  (Somnatic am 04.03.2017, 20:28:45)
....  Re(4): SQL Anfängerfrage  (User545539 am 04.03.2017, 20:30:41)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung