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 Hilfe bei SQL Inner Join bzw group by

Mitglied: HeadoN

HeadoN (Level 1) - Jetzt verbinden

12.07.2019 um 15:32 Uhr, 295 Aufrufe, 12 Kommentare

Hallo ich brauche mal eure Hilfe da meine SQL Zeit doch sehr lange her ist. Ich glaube ich brauche Inner Join und Group by

Ich habe eine Tabelle in der stehen verschiedene Wert. Eine Spalte mit einem Bildpfad welcher öfters vorkommt. Eine Spalte mit einem Variablen Namen welcher auch öfters vorkommt aber immer nur 1x zu jedem Bildpfad und eine Lösungsspalte. Jetzt kann ich mit select bild, Lösung from tabelle where bild like '%xx1%' and variable 'xx1' mir zwar immer das Ergebnis für eine bestimmte Variable anzeigen lassen aber ich möchte das vereinfachen in dem ich mir zu dem Bild zum Beispiel variable xx1 bis xx5 anzeigen lasse bzw reichen mir die Lösungen.
Mitglied: ukulele-7
12.07.2019, aktualisiert um 17:14 Uhr
Nach drei mal lesen checke ichs noch nicht. Also 3 Spalten: Bildpfad, Variabler_Name und Bild, was genau verstehst du unter einer "Lösungsspalte"? Willst du etwas aggregieren? Wiso suchst du mit WHERE nach Bild und gruppierst nicht nach Bildpfad?

SELECT bildpfad, variabler_name, bild, aggregat
FROM tabelle
GROUP BY bildpfad, variabler_name, bild

Einen INNER JOIN brauchst du frühestens wenn du mehr als eine Tabelle hast, davon steht da aber nix.
Bitte warten ..
Mitglied: HeadoN
12.07.2019 um 17:34 Uhr
Ok dann versuche ich es mal anders zu formulieren.

Ich habe

01.

02.
Bild	item_id	Loesung_1
03.
1102110501.png	VL03102a	1
04.
1102110503.png	VL03102a	1
05.
1102110505.png	VL03102a	1
06.
1102110507.png	VL03102a	100
07.
1102110509.png	VL03102a	100
08.
1102110511.png	VL03102a	1
09.
1102110513.png	VL03102a	1
10.
1102110515.png	VL03102a	1
11.
1102110517.png	VL03102a	1
12.
1104120501.png	VL03102a	99
13.

14.
1102110501.png	VL03102b	1
15.
1102110503.png	VL03102b	1
16.
1102110505.png	VL03102b	1
17.
1102110507.png	VL03102b	100
18.
1102110509.png	VL03102b	100
19.
1102110511.png	VL03102b	1
20.
1102110513.png	VL03102b	1
21.
1102110515.png	VL03102b	1
22.
1102110517.png	VL03102b	1
23.
1104120501.png	VL03102b	99
24.
Ich möchte mir nun anzeigen lassen zum Beispiel die Loesung 1 von Bild like %211% and (item_id = 'VL03102a' or item_id='VL03102b')

Am besten in der Form

Bild Lösung1(VL03102a) Lösung2(VL03102b)
Bitte warten ..
Mitglied: em-pie
12.07.2019 um 17:46 Uhr
Moin,

dann wäre es mit einem Join doch möglich.
Ich gehe mal davon aus, dass das Bild der "Schlüssel" ist, dann kannst du die Tabelle mit sich selbst joinen:
01.
Select 
02.
  a.Bild
03.
  , a.item_id as L1
04.
  , b.item_id as L2
05.
From
06.
   YourTable as a
07.
Full Outer Join 
08.
   YourTable as b on a.Bild = b.Bild
09.
where
10.
   Bild like '%211%'
Hinweis zum Full Outer Join:
https://www.w3schools.com/sql/sql_join_full.asp

Gruß
em-pie
Bitte warten ..
Mitglied: HeadoN
12.07.2019 um 18:19 Uhr
Nein Bild ist leider kein PrimaryKey dazu gibt es noch eine ID. Bild kann wie gesagt mehrfach vorkommen aber dann halt immer mit einer anderen item_id.

Der Code spuckt bei mir eine Fehlermeldung.
Bitte warten ..
Mitglied: em-pie
12.07.2019 um 21:43 Uhr
Ich sprach ja auch nicht vom Primarkey.
Das Bild wäre für den Join der gemeinsame Nenner, über den du ja die Item_id erhalten willst... so habe ich es jedenfalls verstanden...

Welchen Fehler erhältst du denn?
Bitte warten ..
Mitglied: ukulele-7
13.07.2019 um 08:44 Uhr
Bild ist in jedem Fall die Spalte anhand derer du das ganze zusammen fassen willst. Ich vermute das kommt aber erst durch ein schlechtes Design zustande, also eigentlich ist warscheinlich item_id mehrteilig, ein Teil haben alle Bilder gemeinsam und ein Teil identifiziert die verschiedenen Einträge mit dem selben Bild. In deinem Beispiel wäre das VL03102 als gemeinsammer Nenner und a,b als "VersionsID" des Bildes.

Wenn dem so ist und diese Struktur immer feste Gemeinsamkeiten hat dann könnte man diese Spalte zerlegen und den ersten Teil als Gemeinsamkeit nehmen. Dazu kennen wir die Entstehung der Werte in dieser Spalte aber nicht ausreichend, wird da immer genau maximal ein Buchstabe angehängt und gibt es auch Einträge ohne Buchstaben?

In jedem Fall ließe sich anhand dieser Spalte oder ersatzweise Bild gruppieren oder Joinen. Ich vermute immernoch du willst gruppieren aber dazu müssen wir deine Spalte Lösung und ihre Bedeutung verstehen. Ist das eine Zeichenkette oder ließe sich das anders irgendwie zusammen fassen? Was ist dein Wunschergebnis zu den oben gezeigten Datensätzen?

Und bitte immer Fehlermeldungen posten Um welches SQL handelt es sich?
Bitte warten ..
Mitglied: HeadoN
15.07.2019 um 11:32 Uhr
Ja die Datenbank ist leider sehr schlecht aufgebaut, leider musste ich die für das Projekt so erstmal von meinem Vorgänger übernehmen.

Kurz noch mal erklärt wo was gespeichert wird.

In dieser Tabelle sind Bilder von allen Seiten verschiedener Hefte drin die verschiedene Benutzer ausgefüllt haben. Jetzt ist es so das auf Seite 12 von Heft 5 eine Variable steht und in der Datenbank sind dann bei 100 Leuten die das ausgefüllt haben 100 Datensätze drin mit der Lösung. Nun ist es aber so das auf einer Seite nicht nur eine Variable vorkommt sondern auch mal 7 verschiedene.

Ich möchte mir dann halt alle Variablen und die Lösungen Anzeigen lassen die auf dieser Seite sind. Jetzt kann ich über ein like sagen er soll mir alle bilder raussuchen die in Heft 5 Seite 12 sind, allerdings bekomme ich dann die Variablen untereinander angezeigt (als einzelne Datensätze) aber das möchte ich gerne gruppiert haben.

bisher benutze ich immer folgende where klausel: bild like '%Heft12%' and item-id='va001'

nicht alle variablen sind gleich aufgebaut manchmal ist nur ein buchstabe am anfang mal mehrere
db abfrage - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: em-pie
15.07.2019 um 22:18 Uhr
Tja,

Das Full Outer Join kann MySQL nicht. Bin von MS SQL ausgegangen.

Aber der Fehler sagt es dir doch: „in der Nähe von Full Outer Join gibt es einen Fehler“

Schaue einmal hier
https://www.peterkropff.de/site/mysql/full_outer_join.htm


Gruß
em-pie
Bitte warten ..
Mitglied: HeadoN
16.07.2019 um 12:24 Uhr
Hi em-pie,

sry aber ich bekomms nicht hin. Habe Joins schon damals in der Ausbildung gehasst. Dein Beispiel geht auch von 2 Tabellen aus, habe versucht es auf eine umzuschreiben aber irgendwie klappt das nicht
Bitte warten ..
Mitglied: schneiderlein
LÖSUNG 16.07.2019, aktualisiert um 14:04 Uhr
Moin @HeadoN .
Hier mal schnell durchgespielt:

Exemplarische Tabelle :
screenshot - Klicke auf das Bild, um es zu vergrößern

Dann folgendes SQL in MySQL Workbench ausgeführt:
01.
SET @sql = NULL;
02.
set @filter = '%0122%';
03.
SELECT
04.
  GROUP_CONCAT(DISTINCT
05.
    CONCAT(
06.
      'MAX(IF(item_id = ''',
07.
      item_id,
08.
      ''', lösung, NULL)) AS ''Lösung(',
09.
      item_id,
10.
      ')'''
11.
    )
12.
  ) INTO @sql
13.
FROM daten
14.
WHERE bild like @filter;
15.

16.
SET @sql = CONCAT('SELECT bild, ', @sql, ' FROM daten WHERE bild like ''',@filter,''' GROUP BY bild');
17.
PREPARE stmt FROM @sql;
18.
EXECUTE stmt;
19.
DEALLOCATE PREPARE stmt;
Und folgendes Ergebnis erhalten:

screenshot - Klicke auf das Bild, um es zu vergrößern

Dabei ist es egal wie viele item_id's zum entsprechenden Bild existieren, diese werden ermittelt und die entsprechenden Spalten generiert.

Lesenswert dazu :Dynamic pivot tables (transform rows to columns)

Ciao.
Gruß
Bitte warten ..
Mitglied: HeadoN
16.07.2019 um 14:48 Uhr
Vielen vielen Dank das war es. Musste es noch ein klein bisschen anpassen aber jetzt funktioniert es perfekt.
Bitte warten ..
Ähnliche Inhalte
Datenbanken
SQL ORDER BY und Join mit 2 Tabellen
gelöst Frage von DippsDatenbanken7 Kommentare

Hallo an alle, ich versuche gerade eine Join mit 2 Tabellen auf zubauen und mir den letzten Datensatz Anzeigen ...

Datenbanken
MYSQL View group by
gelöst Frage von schneerunzelDatenbanken2 Kommentare

Hallo zusammen, ich habe eine Tabelle in einer MySQL DB über die ich eine View legen möchte: Die Tabelle ...

Datenbanken

SQL - Abfrage - Mehrere JOINS - Zusätzliche unterabfrage mit Group By

gelöst Frage von Andy1987Datenbanken4 Kommentare

Hallo Leute, ich habe mal wieder ein Problem mit einer SQL Abfrage. Es geht hierbei um Übersicht zur Netzwerkdokumentation, ...

Datenbanken

SQL - JOIN zeigt mehrfaches an

Frage von MiStDatenbanken9 Kommentare

Guten Morgen, ich habe mich frisch mit dem Thema SQL "angefreundet". Jetzt habe ich aber irgendwie ein Problem. Und ...

Neue Wissensbeiträge
Backup

Veeam Agent für MS Windows - neue Version verfügbar (bedingt jedoch offenbar .NET Framework 4.6)

Information von VGem-e vor 23 StundenBackup

Moin Kollegen, einer unserer Server zeigte grad an, dass für o.g. Software ein Update verfügbar ist. Ob ein evtl. ...

Python

Sie meinen es ja nur gut - Microsoft hilft python-Entwicklern auf unnachahmliche Weise

Information von DerWoWusste vor 2 TagenPython2 Kommentare

Stellt Euch vor, Ihr nutzt python unter Windows 10 und skriptet damit regelmäßig Dinge. Nach dem Update auf Windows ...

Sicherheits-Tools

TrendMicro Worry-Free Business Security 10.0 SP1 steht in Englisch bereit mit Unterstützung für Windows 10 1903 (May Update)

Information von VGem-e vor 2 TagenSicherheits-Tools1 Kommentar

Moin Kollegen, Dann kommt wohl demnächst auch die deutschsprachige/europäische Version zur Auslieferung. Gruß VGem-e

Batch & Shell
PowerShell Konferenz - Videos online
Information von NetzwerkDude vor 3 TagenBatch & Shell

Abend, die Tage werden Videos der Talks von der diesjährigen EU Powershell Konferenz hochgeladen, sind einige Interessante dabei: MFG ...

Heiß diskutierte Inhalte
Google Android
Anbieter für Diensthandys
Frage von Pat.batGoogle Android24 Kommentare

Hallo zusammen, ich bin seit einiger Zeit zuständig für die Diensthandys bei uns in der Behörde. Eine Management Software ...

Windows Server
Windows Server 2016 einrichten
Frage von borjiaWindows Server20 Kommentare

Ich würde gerne einen Server einrichten, erstmal nur mit DNS und AD. Habe mich die letzten Wochen durch diverse ...

Exchange Server
Vorgehen um von Tobit auf Exchange zu wechseln
Frage von Martin1987Exchange Server17 Kommentare

Guten Abend Ich habe den Auftrag erhalten, unser Mail von David zu Outlook zu wechseln. Wie muss ich da ...

Microsoft Office
Office 365 eMail via Website verschicken
Frage von BiBeSoMicrosoft Office16 Kommentare

Hallo, kann man im Office 365 eMails anlegen welche zum versenden (smtp) für die Website funktionieren ? Muss man ...