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, 3809 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 ...

Verschlüsselung & Zertifikate
Zugriff auf mySQL-DB mit ODBC und SSL (2)

Frage von Titan24 zum Thema Verschlüsselung & Zertifikate ...

Cluster
Brauche hilfe beim einrichten von Galera Cluster for MySQL

Frage von akadawa zum Thema Cluster ...

Datenbanken
MySQL - Mehrere Instanzen

Frage von ForgottenRealm zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows 7
gelöst BOOTMGR is missing (auch nach bootrec -RebuildBcd) (21)

Frage von Mipronimo zum Thema Windows 7 ...

Router & Routing
Tipps für Router (ca. 100 clients, VPN) (20)

Frage von oel-auge zum Thema Router & Routing ...

Windows Userverwaltung
Windows Freigabe: Zugriff auf alle Ordner trotz Sicherheitseinstellungen (18)

Frage von Pandreas zum Thema Windows Userverwaltung ...

Exchange Server
gelöst MS Exchange 2016 - Basicconfig Fragen (16)

Frage von maddig zum Thema Exchange Server ...