Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

LEFT JOIN mit 3 Tabellen - MySQL 5.1

Frage Entwicklung Datenbanken

Mitglied: Dirmhirn

Dirmhirn (Level 2) - Jetzt verbinden

07.10.2011, aktualisiert 12:31 Uhr, 3812 Aufrufe, 2 Kommentare

Hi!

Erstelle gerade eine Datenbank für interne Produkttests.

Man kann Produkte (Sitze) anlegen und mit verschiedenen Testkriterien/Parametern verknüpfen. Nach dem Test kann man die Ergebbnisse in die Datenbank eintragen.

3 Tabellen:
own
- ID_parameter
- ID_seat

parameter
- ID_parameter
- description
- ...

test
- ID_parameter
- ID_seat
- ID_vehicle
- test_result
- ...

zu jedem ID_seat gibt es genau einen Eintrag pro ID_parameter in `own`
zu jeder ID_seat & ID_vehicle kombi gibt es maximal einen eintrag mit ID_parameter in `test`

jetzt kann es aber vorkommen, dass in die Own-Tabelle neue Verknüpfungen eingetragen werden. Mein Ziel ist es nun alle vorhandenen test_results und alle neu verknüpften Parameter für eine bestimmte ID_Seat & Vehicle.

eigentlich dachte es geht mit:
01.
SELECT *  
02.
FROM (parameter LEFT JOIN own USING(ID_parameter)) LEFT JOIN test USING(ID_parameter) 
03.
WHERE (own.ID_seat = xx) or (test.ID_seat = xx AND test.ID_vehicle = yy)
das wird aber ein CROSS JOIN oder so...

Folgende Lösung funktioniert:
01.
SELECT ID_parameter, ID_seat, description, `type`, max(test_result) 
02.
FROM ( 
03.
    (SELECT parameter.ID_parameter, ID_seat, description, `type`, NULL AS test_result 
04.
    	FROM parameter LEFT JOIN own USING (ID_parameter) 
05.
    	WHERE ID_seat = xx) 
06.
    UNION 
07.
    (SELECT parameter.ID_parameter, ID_seat, description, `type`, test_result 
08.
    	FROM parameter LEFT JOIN test USING (ID_parameter) 
09.
    	WHERE ID_seat = xx AND ID_vehicle = yy) 
10.
    ) AS derived_tab 
11.
GROUP BY ID_parameter
gibt es eine effizientere Lösung?

es ist eine MySQL 5.1 Datenbank.

sg Dirm
Mitglied: MadMax
10.10.2011 um 13:29 Uhr
Hallo Dirm,

da in der own-Tabelle ja alle Verknüpfungen ID_parameter/ID_seat drin sind, brauchst Du zur own-Tabelle kein left join. Die Tabelle test muß dann nur noch über ID_seat mit own verknüpft werden und Du hast keinen cross join mehr:

01.
SELECT	*  
02.
FROM	parameter 
03.
	JOIN own on parameter.ID_parameter = own.ID_parameter 
04.
	LEFT JOIN test on own.ID_parameter = test.ID_parameter and own.ID_seat = test.ID_seat and test.ID_vehicle = yy 
05.
WHERE	own.ID_seat = xx
Gruß, Mad Max
Bitte warten ..
Mitglied: Dirmhirn
11.10.2011 um 18:14 Uhr
Hi Mad Max,

Danke für den Input - werde den Code umbauen.

Sg Dirm
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst MySQL Abfrage um JOIN erweitern (14)

Frage von datadexx zum Thema Datenbanken ...

Sicherheits-Tools
Sicherheitstest von Passwörtern für ganze DB-Tabellen (1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

VB for Applications
gelöst Feld mit CSV-Daten aus MySQL-Datenbank einlesen (3)

Frage von Andreas.HH1 zum Thema VB for Applications ...

Datenbanken
gelöst MYSQL Abfrage Werte summieren (3)

Frage von Ghost108 zum Thema Datenbanken ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(8)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows Userverwaltung
gelöst Nicht Admins erlauben Verknüpfungen zu löschen (17)

Frage von WinLiCLI zum Thema Windows Userverwaltung ...

Windows Update
gelöst WSUS Produkte weiter einschränken (11)

Frage von thaefliger zum Thema Windows Update ...