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, 3791 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
MySQL - Join (4)

Frage von Thoomaas zum Thema Datenbanken ...

Batch & Shell
gelöst PowerShell Domain Join (2)

Frage von Patrick-IT zum Thema Batch & Shell ...

PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...