also erstmal zu meinem Problem: Ich habe eine sehr lange join abfrage allerding tut diese nicht das was ich will dazu kommt noch das ich mit der Thematik nicht gut auskenne das ziel der abfrage ist es eigentlich nicht nur eine zeile anzeigen zu lassen sondern auch die in den tabellen enthaltenen daten. Hoffe ich konnte mein Problem genau genug erklären wenn nicht fragt ruihg. Datenbank: https://drive.google.com/file/d/1OQXt6-4NsA95UTS0FR5AdA3vxOvRaVnn/view?usp=sharing Abfrage: SELECT harddisks.modelfamiliy, harddisks.devicemodel, harddisks.firmwareversion, harddisks.serialnumber, cases.casename, attributenames.attribute_name, attributeflags.flagvalue, attributeraw_values.attribute_valuevalue, attributethreshs.threshvalue, attributetypes.typevalue, attributeupdates.updatevalue, attributevalues.valuevalue, attributewhen_faileds.when_failedvalue, attributeworsts.worstvalue, users.PK_user FROM smartcontrol.harddisks JOIN smartcontrol.cases ON harddisks.FK_case = cases.PK_case JOIN smartcontrol.users ON harddisks.FK_user = users.PK_user JOIN smartcontrol.attributeflags ON harddisks.PK_harddisk = attributeflags.FK_harddisk JOIN smartcontrol.attributenames ON attributeflags.FK_ID_attributename = attributenames.PK_ID_attributename JOIN smartcontrol.attributeraw_values ON harddisks.PK_harddisk = attributeraw_values.FK_harddisk JOIN smartcontrol.attributethreshs ON harddisks.PK_harddisk = attributethreshs.FK_harddisk JOIN smartcontrol.attributetypes ON harddisks.PK_harddisk = attributetypes.FK_harddisk JOIN smartcontrol.attributeupdates ON harddisks.PK_harddisk = attributeupdates.FK_harddisk JOIN smartcontrol.attributevalues ON harddisks.PK_harddisk = attributevalues.FK_harddisk JOIN smartcontrol.attributewhen_faileds ON harddisks.PK_harddisk = attributewhen_faileds.FK_harddisk JOIN smartcontrol.attributeworsts ON harddisks.PK_harddisk = attributeworsts.FK_harddisk WHERE cases.casename like 'Groß' and harddisks.serialnumber like 'WD-WXN1E29E4EL4' and attributeworsts.date = '2021-04-30' GROUP BY attributeflags.PK_ID_attributeflag;
Lass dir die Abfrage zuerst mal in irgend einem Formatier Tool (gibts auch online diverse), anständig Formatieren, dann sieht man auch, was die eigentlich macht:
1 | SELECT harddisks.modelfamiliy, |
2 | harddisks.devicemodel, |
3 | harddisks.firmwareversion, |
4 | harddisks.serialnumber, |
5 | cases.casename, |
6 | attributenames.attribute_name, |
7 | attributeflags.flagvalue, |
8 | attributeraw_values.attribute_valuevalue, |
9 | attributethreshs.threshvalue, |
10 | attributetypes.typevalue, |
11 | attributeupdates.updatevalue, |
12 | attributevalues.valuevalue, |
13 | attributewhen_faileds.when_failedvalue, |
14 | attributeworsts.worstvalue, |
15 | users.pk_user |
16 | FROM smartcontrol.harddisks |
17 | JOIN smartcontrol.cases |
18 | ON harddisks.fk_case = cases.pk_case |
19 | JOIN smartcontrol.users |
20 | ON harddisks.fk_user = users.pk_user |
21 | JOIN smartcontrol.attributeflags |
22 | ON harddisks.pk_harddisk = attributeflags.fk_harddisk |
23 | JOIN smartcontrol.attributenames |
24 | ON attributeflags.fk_id_attributename = attributenames.pk_id_attributename |
25 | JOIN smartcontrol.attributeraw_values |
26 | ON harddisks.pk_harddisk = attributeraw_values.fk_harddisk |
27 | JOIN smartcontrol.attributethreshs |
28 | ON harddisks.pk_harddisk = attributethreshs.fk_harddisk |
29 | JOIN smartcontrol.attributetypes |
30 | ON harddisks.pk_harddisk = attributetypes.fk_harddisk |
31 | JOIN smartcontrol.attributeupdates |
32 | ON harddisks.pk_harddisk = attributeupdates.fk_harddisk |
33 | JOIN smartcontrol.attributevalues |
34 | ON harddisks.pk_harddisk = attributevalues.fk_harddisk |
35 | JOIN smartcontrol.attributewhen_faileds |
36 | ON harddisks.pk_harddisk = attributewhen_faileds.fk_harddisk |
37 | JOIN smartcontrol.attributeworsts |
38 | ON harddisks.pk_harddisk = attributeworsts.fk_harddisk |
39 | WHERE cases.casename LIKE 'Groß' |
40 | AND harddisks.serialnumber LIKE 'WD-WXN1E29E4EL4' |
41 | AND attributeworsts.date = '2021-04-30' |
42 | GROUP BY attributeflags.pk_id_attributeflag; |
Dann, warum ist bei den Einträgen in der Tabelle "harddisks" ein \r (CR, carriage return)? Nimm die mal weg, das könnte z.B. in der Konsole zu Problemen führen. (Warum matcht das LIKE dort überhaupt etwas, da sind ja keine % drin?) Und dann zu den JOINs, einfach nur JOIN ist ein INNER JOIN. Wenn es dort in der zu joinenden Tabelle keine passenden Einträge gibt, bekommst du keinen Eintrag. Du brauchst vermutlich LEFT JOINs, wenn dort nichts zu joinen ist, gibt es trotzdem einen Eintrag, bei der zu joinenden Tabelle ist halt dann alles NULL. Siehe z.B. https://www.w3schools.com/sql/sql_join.asp für nette Grafiken und Beispiele.
Wenn du dich nicht gut auskennst, dann musst du entweder einfache Abfragen machen oder lernen. Geh halt schrittweise vor. Mach eine Abfrage auf eine Tabelle. Wenn die funktioniert nehme das Join auf eine weitere Tabelle dazu und schau was rauskommt. Wenn du so schrittweise vorgehst dann siehst du genau wo es hängt. Vorher solltest du aber erst mal wissen welches Ergebnis du haben willst. Da du hier einfach dieses "Monster" Join reinwirfst ohne auch nur zu beschreiben welches Ergebnis du haben möchtest deutet darauf hin, dass das SQL eher irgendwo mit copy & paste geholt wurde. Vieleicht passt deine Datenbank gar nicht dazu.
:
Bearbeitet durch User
Udo hättest du eventuell Lust mir gegen eine Bezahlung zu helfen? und das Problem zu lösen?
Jonas N. schrieb: > Udo hättest du eventuell Lust mir gegen eine Bezahlung zu helfen? und > das Problem zu lösen? Danke, aber nein. Keine Zeit und auch nicht wirklich Lust dazu. Aber du kannst das Angebot mit einer möglichst vollständigen Beschreibung was zu tun wäre ja mal in das Unterforum "Markt" stellen. Aber dann musst du schon deutlich mehr Infos liefern wie in dem Post hier.
Ha, die Abfrage ist doch recht easy... >das ziel der abfrage ist es eigentlich >nicht nur eine zeile anzeigen zu lassen sondern auch die in den tabellen >enthaltenen daten dann mach halt die WHERE-Bedingung raus.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.