Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

INNER JOIN für mehrere Spalten?!

Frage Entwicklung Datenbanken

Mitglied: Chribu

Chribu (Level 1) - Jetzt verbinden

10.06.2009, aktualisiert 15:03 Uhr, 11722 Aufrufe, 5 Kommentare

Hallo Admins,

ich habe mal wieder eine kleine Problemstellung für euch, bei der ich grade nicht weiterkomme:

Ich bin grade dabei ein kleines PHP-Tool (+mysql) zu entwickeln, dass ein paar Anwendungen managen soll.

Folgende Situation:

Tabelle "Benutzer":
ID | Vorname | Nachname | Tel | Email

Tabelle "Anwendungen":
AnwendungsID | Name | URL | Version | AnwendungAP | BetriebsAP | TechnikAP (wobei AP für Ansprechpartner steht)


Jetzt möchte ich gerne alle Anwendungen mit meinem PHP-Script in einer Tabelle ausgeben lassen (kein Problem).
Das Besondere dabei ist, dass sich hinter den Tabellenspalten der APs (z.B. "AnwendungsAP") nur die IDs der zugeordnetetn Benutzer liegt, anstatt
der ausgeschriebenen Namen.

Diese "fehlende" Verknüpfung möchte ich jetzt gerne mit dem INNER JOIN-Befehl herstellen, was bei einer AP-Spalte kein Problem ist:

SELECT Anwendungen.ID, Benutzer.ID, Benutzer.Vorname, Benutzer.Nachname, Name, URL, Version, AnwendungAP
FROM Anwendungen INNER JOIN Benutzer ON AnwendungAP = Benutzer.ID;

Wie gestalte ich denn den SQL-Query, wenn ich jetzt noch die anderen APs verknüpfen möchte?
geht das überhaupt oder muss ich dann für jede Saplte nen eigenen Query erstellen?!

Danke schon jetzt für eure Hilfe!

Gruß
Chribu
Mitglied: Biber
10.06.2009 um 12:24 Uhr
Moin Chribu,

rein formal kannst Du es so lösen:
01.
 
02.
SELECT A.ID,  
03.
AAP.Vorname As AAPVorname, AAP.Nachname as AAPNachname,  
04.
BAP.Vorname As BAPVorname, BAP.Nachname as BAPNachname,  
05.
TAP.Vorname As TAPVorname, TAP.Nachname as TAPNachname,  
06.
A.Name, A.URL, A.Version 
07.
FROM Anwendungen A 
08.
JOIN Benutzer AAP ON A.AnwendungAP = AAP.ID 
09.
JOIN Benutzer BAP ON A.BetriebsAP = BAP.ID 
10.
JOIN Benutzer TAP ON A.TechnikAP = TAP.ID 
11.
;
.... wenn denn alle xxxAP-Spalten NOT NULLABLE sind und auch gültige BenutzerIDs enthalten.

Falls aber einzelne dieser Felder (noch) leer sind, würde ich es eher über einen UNION lösen.

Eigentlich würde ich ohnehin die Lösüng über ein UNION vorziehen und alle vorhandenen xxxAP-Namen, xxxAP-Vormanem etc jeweils untereinander auflisten so wie heute in der AP-Tabelle die xxxAP-IDs untereineinander stehen.

Grüße
Biber
Bitte warten ..
Mitglied: Chribu
10.06.2009 um 12:58 Uhr
Hallo Biber,

danke für deine schnelle Antwort!


SELECT A.ID,
AAP.Vorname As AAPVorname, AAP.Nachname as AAPNachname,
BAP.Vorname As BAPVorname, BAP.Nachname as BAPNachname,
TAP.Vorname As TAPVorname, TAP.Nachname as TAPNachname,
A.Name, A.URL, A.Version
FROM Anwendungen A
JOIN Benutzer AAP ON A.AnwendungAP = AAP.ID
JOIN Benutzer BAP ON A.BetriebsAP = BAP.ID
JOIN Benutzer TAP ON A.TechnikAP = TAP.ID
;

Gehst du bei z.B. "AAP.Vorname" davon aus, das es eine AAP-Tabelle gibt, wo du die ID auslesen kannst?
Wenn JA, haben wir uns ein bisschen missverstanden, da es wie gesagt nur die beiden oben genannten Tabellen gibt und in der Tabelle "Anwendungen" in den Spalten der APs, nur die zugehörigen IDs aus der "Benutzer"-Tabelle stehen.

Wenn nein, habe ich deinen Query noch nicht komplett verstanden

Gruß
Chribu
Bitte warten ..
Mitglied: Biber
10.06.2009 um 13:45 Uhr
Moin Chribu,

nein, ich gehe natürlich nicht davon aus, dass es eine spezielle "AnwendungsAP"-Tabelle und eine spezielle "TechnikAP"-Tabelle und eine spezielle "BetriebsAP"-Tabelle gibt... wer sollte so ein verrückte Tabellendesign konzipiert haben?

Nein, ich verJOINe die Tabelle "Benutzer" dreimal und spreche sie unter verschiedenen ALIASen an (einmal als AAP wie AnwendungsAnsprechpartner, einmal als BAP wie BetriebsAP und einmal als TAP wie TechnikAP)

Die Tabelle "Anwendungen" spreche ich unter dem ALIAS A an - und im "SELECT felder"-Teil der Query kann ich dann mit dem ALIAS als Präfix vor den Feldnamen genau und eindeutig angeben, wann ich welches Feld aus welcher Tabelle/aus welchem JOIN ich auf dem Schirm haben möchte.

Jag doch die Query einmal hoch zum Server - ist doch nur eine SELECT/Lese-Query.

Grüße
Biber
Bitte warten ..
Mitglied: Logan000
10.06.2009 um 13:52 Uhr
Moin Moin

AAP, BAP, und TAP sind Aliase der Tabelle Benutzer.
Vieleich wird Bibers Vorschlag so deutlicher:

01.
SELECT A.ID, 
02.
AAP.Vorname As AAPVorname, AAP.Nachname as AAPNachname, 
03.
BAP.Vorname As BAPVorname, BAP.Nachname as BAPNachname, 
04.
TAP.Vorname As TAPVorname, TAP.Nachname as TAPNachname, 
05.
A.Name, A.URL, A.Version 
06.
FROM Anwendungen as A 
07.
JOIN Benutzer as AAP ON A.AnwendungAP = AAP.ID 
08.
JOIN Benutzer as BAP ON A.BetriebsAP = BAP.ID 
09.
JOIN Benutzer as TAP ON A.TechnikAP = TAP.ID
Gruß L.

/Edit
Mist, schon wieder zu lahm.
Bitte warten ..
Mitglied: Chribu
10.06.2009 um 14:56 Uhr
Moin zusammen,

... wer sollte so ein
verrückte Tabellendesign konzipiert haben?

Ich habe mich schon gewundert
Nein, ich verJOINe die Tabelle "Benutzer" dreimal und
spreche sie unter verschiedenen ALIASen an (einmal als AAP wie
AnwendungsAnsprechpartner, einmal als BAP wie BetriebsAP und einmal
als TAP wie TechnikAP)
Die Tabelle "Anwendungen" spreche ich unter dem ALIAS A an
- und im "SELECT felder"-Teil der Query kann ich dann mit
dem ALIAS als Präfix vor den Feldnamen genau und eindeutig
angeben, wann ich welches Feld aus welcher Tabelle/aus welchem JOIN
ich auf dem Schirm haben möchte.

Jetzt ist es um einiges klarer! @Logan: Danke für die "Detailierung" !
Jag doch die Query einmal hoch zum Server - ist doch nur eine
SELECT/Lese-Query.

Hat super funktioniert!
Vielen Dank ihr beiden. Jetzt habe ich wieder etwas dazugelernt. Man lernt ja nie aus

Schönen Tag noch!
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Inner join über 3 Tabellen
Frage von Fitzel69Datenbanken10 Kommentare

Hallo zusammen, ich habe folgendes Problem: Ich muß aus unserem ERP System mehrere Infos heraus ziehen. Hierfür benötige ich ...

Datenbanken
SQL LEFT JOIN in Spalten
gelöst Frage von StfnCstrDatenbanken5 Kommentare

Hallo, ich sehe mal wieder den Wald vor lauter Bäumen nicht. Ich habe 2 Tabellen Tabelle 1: PK, Vorname, ...

Datenbanken
SQL - Mehrere Tabellen über JOINS verketten
Frage von GwahlersDatenbanken1 Kommentar

Aktuell habe ich das Problem dass die Ausgabe von meinen Erwartungen abweicht JOINS und Tabellen im Anhang Folgende Abfrage ...

Datenbanken
MySQL - Join
Frage von ThoomaasDatenbanken4 Kommentare

Hallo alle zusammen! Ich habe zwei Tabellen in meiner Datenbank. Die eine beinhaltet Teams und einen Code zum Team ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...