Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 11:36

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



LEFT JOIN zeigt zu viele Einträge oder nicht passend

Discussion on LEFT JOIN zeigt zu viele Einträge oder nicht passend within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
 
Cc_Cc_Cc's Avatar
 
elite*gold: 0
Join Date: Mar 2011
Posts: 418
Received Thanks: 17
LEFT JOIN zeigt zu viele Einträge oder nicht passend

Guten Tag,

ich wollte 3 Tabellen mit Left Join verknüpfen. Entweder zeigt er mir zufälliger Weise 284 Einträge an obwohl es nur 20 existieren oder er zeigt bei einer Tabelle immer die gleichen Records an. Nach 3 Stunden google und etlichen Versuchen komm ich nicht weiter.

Tabellen-Struktur:


Die Möglichkeit sagt mir das es 289 Einträge gibt obwohl ich ca 20-22 (10 in der einen und 10 in der anderen Tabelle)

Wenn ich bei dem obigen Code noch ein Group by dc.id hinzufüge, klappt die domain_check Tabelle aber bei SSL_INFO zeigt er mir ganze Zeit das erste Ergebnis an. Anders rum mit s1.id zeigt er mir jedes mal das gleiche Ergebnis bei Domain_check an.

Mit diesem Befehl zeigt er mir an das ich 18523 Beiträge habe...


ich möchte nur 3 Tabellen verknüpfen und halt alle ausgeben.

Das Endergebnis sollte eig so aussehen:

domain | ssl_check | ssl_name
domain.de 1 ENCRYPT
domain.de 1 NEW ENCRYPT
domain.de 1 NEW ENCRYPT

aber entweder zeigt er es so an:

domain | ssl_check | ssl_name
domain.de 1 ENCRYPT
domain.de 1 ENCRYPT
domain.de 1 ENCRYPT


oder er zeigt mir an das ich über 200 bis 18.000 Beiträge habe obwohl 20 max existieren.
Cc_Cc_Cc is offline  
Old 09/21/2020, 13:17   #2
 
Legithos's Avatar
 
elite*gold: 95
Join Date: Nov 2009
Posts: 669
Received Thanks: 47
Quote:
Originally Posted by Cc_Cc_Cc View Post

Tabellen-Struktur:

Code:
Tabelle 1 Domain

ID -- DOMAIN -- DATE

1	  domain.de   DATE...

Tabelle 2 DOMAIN_CHECK

ID -- DOMAIN_ID -- SSL_CHECK 
1		1			 1
2		1			 1
3              1                        1

Tabelle 3 SSL_INFO

ID -- DOMAIN_ID -- SSL_NAME --
1		1			ENCRYPT
2		1			NEW ENCRYPT
3		1			NEW ENCRYPT
Du solltest es auf alle Fälle vermeiden, alle Spalten mit * auszulesen - am besten immer alle benennen. Wenn du hier alle Daten haben willst, sollte die Lösung wie folt aussehen:


Das sollte die Lösung für die Tabellen sein.
Legithos is offline  
Old 09/21/2020, 13:54   #3
 
Cc_Cc_Cc's Avatar
 
elite*gold: 0
Join Date: Mar 2011
Posts: 418
Received Thanks: 17
Quote:
Originally Posted by Legithos View Post
Du solltest es auf alle Fälle vermeiden, alle Spalten mit * auszulesen - am besten immer alle benennen. Wenn du hier alle Daten haben willst, sollte die Lösung wie folt aussehen:


Das sollte die Lösung für die Tabellen sein.
Hi, erstmals danke^^
Hab es mit deiner Lösung probiert:

Er zeigt mir an das ich 289 Datensätze habe, obwohl nur 17 bei domain_check existieren und 17 bei ssl_info. Wie kann das sein?
Cc_Cc_Cc is offline  
Old 09/21/2020, 14:52   #4
 
Legithos's Avatar
 
elite*gold: 95
Join Date: Nov 2009
Posts: 669
Received Thanks: 47
Das müsste ich mir anschauen, adde mich mal in Discord. Bliind#0993
Legithos is offline  
Old 09/21/2020, 16:19   #5




 
Shino's Avatar
 
elite*gold: 100
Join Date: Jan 2008
Posts: 3,580
Received Thanks: 1,366
Bist du dir bewusst was die einzelnen Joins machen?
Hier ein guter Link dafür:

Sieht ganz danach aus, dass du all deine Datensätze die join Bedingung erfüllen (dc.domain_id = d.id, s1.domain_id = d.id) und deine erste Tabelle wahrscheinlich nur einen Eintrag hat. Dadurch wird jeder Datensatz von domain check mit ssl info gejoint (aus einem Datensatz wird dann 17). Das ganze passiert wohl dann 17 mal (weil 17 Einträge aus domain check) und schon hast du deine 289 Einträge.

Ich bin mir nicht ganz sicher was du erreichen möchtests, aber sieht eher nach einem inner join aus.
Shino is offline  
Thanks
2 Users
Old 09/21/2020, 16:32   #6
 
Cc_Cc_Cc's Avatar
 
elite*gold: 0
Join Date: Mar 2011
Posts: 418
Received Thanks: 17
Quote:
Originally Posted by Shino View Post
Bist du dir bewusst was die einzelnen Joins machen?
Hier ein guter Link dafür:

Sieht ganz danach aus, dass du all deine Datensätze die join Bedingung erfüllen (dc.domain_id = d.id, s1.domain_id = d.id) und deine erste Tabelle wahrscheinlich nur einen Eintrag hat. Dadurch wird jeder Datensatz von domain check mit ssl info gejoint (aus einem Datensatz wird dann 17). Das ganze passiert wohl dann 17 mal (weil 17 Einträge aus domain check) und schon hast du deine 289 Einträge.

Ich bin mir nicht ganz sicher was du erreichen möchtests, aber sieht eher nach einem inner join aus.
Genau so macht der das mit den 17 Einträgen usw, aber hab das jetzt mit Inner Join versucht, das geht auch nicht damit. ich checks einfach nicht...
Cc_Cc_Cc is offline  
Old 09/21/2020, 16:55   #7




 
Shino's Avatar
 
elite*gold: 100
Join Date: Jan 2008
Posts: 3,580
Received Thanks: 1,366
Also hab mir mal die Mühe gemacht und deine Datenbankstruktur mal kopiert und mit ähnlichen Daten zu füllen.

Wo genau hängt es bei dir?

Und so ein allgemeiner Tipp von mir: Versuche, wenn du eine Aufgabe/Problem lösen willst, dir klar zu machen was deine Ausgangslage ist und zu welchem Ergebnis du kommen möchtest. Das macht das Fragestellen deutlich einfacher für andere zu verstehen und gibt dir eine klarere Struktur darüber was du machen solltest.
Shino is offline  
Old 09/21/2020, 17:40   #8
 
Cc_Cc_Cc's Avatar
 
elite*gold: 0
Join Date: Mar 2011
Posts: 418
Received Thanks: 17
Quote:
Originally Posted by Shino View Post
Also hab mir mal die Mühe gemacht und deine Datenbankstruktur mal kopiert und mit ähnlichen Daten zu füllen.

Wo genau hängt es bei dir?

Und so ein allgemeiner Tipp von mir: Versuche, wenn du eine Aufgabe/Problem lösen willst, dir klar zu machen was deine Ausgangslage ist und zu welchem Ergebnis du kommen möchtest. Das macht das Fragestellen deutlich einfacher für andere zu verstehen und gibt dir eine klarere Struktur darüber was du machen solltest.
Das er mir nicht 17 Ergebnisse anzeigt sondern 289. Oben hab ich nur ein bsp gemacht mit der Tabelle, da sind 17 Einträge drinne. Er soll mir einfach nur meine 17 Datensätze anzeigen und nicht 289 Datensätze. Er macht sozusagen 17x17 also jeder Datensatz * (Mal) 17. 17*17 sind auch 289 ich weiß nicht warum er mir soviele anzeigt, da ich nicht mal soviele Einträge drin stehen habe
Cc_Cc_Cc is offline  
Old 09/21/2020, 18:17   #9




 
Shino's Avatar
 
elite*gold: 100
Join Date: Jan 2008
Posts: 3,580
Received Thanks: 1,366
Quote:
Let’s start by reminding ourselves what a LEFT JOIN is and how to use it. You might remember that an INNER JOIN returns only the records that are in both tables. In contrast, a LEFT JOIN in SQL returns all records (or rows) from the left table and only the matched records (or rows) from the right. This implies that, if a specific row is present in the left table but not in the right, the result will include this row but with a NULL value in each column from the right. If a record from the right table is not in the left, it will not be included in the result.
Quelle:

Also nochmal: Schau dir gerne nochmal die joins an.
Angenommen deine Tabelle domain besitzt folgende Datensätze:
id, domain, date
1, domain.de, 2020-09-21

und domain_check:
ID - domainId - sslCheck
1, 1, 1
2,1,1
3,1,1

und ssl_info:
ID, domainId, sslName
1,1,ENCRYPT
2,1,NEW ENCRYPT
3, 1, NEW ENCRYPT

Dann bekommst du mit einem left join on domain.id = domain_check.domainID folgendes zurück (Join1 Datensatz1):
id domain date id domainId sslCheck
1 domain.de 2020-09-21 1 1 1
1 domain.de 2020-09-21 2 1 1
1 domain.de 2020-09-21 3 1 1

Warum?
Weil dein Datensatz aus domain die id 1 hat und alle Datensätzen aus domain_check die domainId 1 haben. Also wird 1, domain.de, 2020-09-21 jeweils mit (1, 1, 1), (2,1,1), (3,1,1) gejoint.

Wenn wir diesen Datensatz jetzt nochmal mit einem left join on ssl_info.domainId = domain.id joinen dann bekommen wir:
1 domain.de 2020-09-21 1 1 1 1 1 ENCRYPT
1 domain.de 2020-09-21 2 1 1 1 1 ENCRYPT
1 domain.de 2020-09-21 3 1 1 1 1 ENCRYPT
1 domain.de 2020-09-21 1 1 1 2 1 NEW ENCRYPT
1 domain.de 2020-09-21 2 1 1 2 1 NEW ENCRYPT
1 domain.de 2020-09-21 3 1 1 2 1 NEW ENCRYPT
1 domain.de 2020-09-21 1 1 1 3 1 NEW ENCRYPT
1 domain.de 2020-09-21 2 1 1 3 1 NEW ENCRYPT
1 domain.de 2020-09-21 3 1 1 3 1 NEW ENCRYPT

Warum?
Weil jetzt wieder für jeden Datensatz die join Bedingung erfüllt ist. Das bedeutet der gesamte Datensatz aus Join1 Datensatz1 wird mit dem Datensatz aus ssl_info gejoint. Daraus entstehen halt 3*3 Datensätze.
(1 domain.de 2020-09-21 1 1 1) wird jeweils gejoint mit (1,1,ENCRYPT), (2,1,NEW ENCRYPT), (3, 1, NEW ENCRYPT) usw..

Dadurch bekommst du halt viele Datensätze zusammen, weil deine Join Bedingung auf alle Einträge gültig ist.


Eventuell solltest du dir nochmal deine Join Bedingung anschauen und dir überlegen, was du dort eig machst und was du vorhast. Ich habe leider keinerlei Plan, was du am Ende haben möchtest.

Edit: Für schnelle Fragen kannst du mich natürlich auch gerne in Discord adden.
Shino is offline  
Old 09/21/2020, 18:55   #10
 
Cc_Cc_Cc's Avatar
 
elite*gold: 0
Join Date: Mar 2011
Posts: 418
Received Thanks: 17
Quote:
Originally Posted by Shino View Post
Quelle:

Also nochmal: Schau dir gerne nochmal die joins an.
Angenommen deine Tabelle domain besitzt folgende Datensätze:
id, domain, date
1, domain.de, 2020-09-21

und domain_check:
ID - domainId - sslCheck
1, 1, 1
2,1,1
3,1,1

und ssl_info:
ID, domainId, sslName
1,1,ENCRYPT
2,1,NEW ENCRYPT
3, 1, NEW ENCRYPT

Dann bekommst du mit einem left join on domain.id = domain_check.domainID folgendes zurück (Join1 Datensatz1):
id domain date id domainId sslCheck
1 domain.de 2020-09-21 1 1 1
1 domain.de 2020-09-21 2 1 1
1 domain.de 2020-09-21 3 1 1

Warum?
Weil dein Datensatz aus domain die id 1 hat und alle Datensätzen aus domain_check die domainId 1 haben. Also wird 1, domain.de, 2020-09-21 jeweils mit (1, 1, 1), (2,1,1), (3,1,1) gejoint.

Wenn wir diesen Datensatz jetzt nochmal mit einem left join on ssl_info.domainId = domain.id joinen dann bekommen wir:
1 domain.de 2020-09-21 1 1 1 1 1 ENCRYPT
1 domain.de 2020-09-21 2 1 1 1 1 ENCRYPT
1 domain.de 2020-09-21 3 1 1 1 1 ENCRYPT
1 domain.de 2020-09-21 1 1 1 2 1 NEW ENCRYPT
1 domain.de 2020-09-21 2 1 1 2 1 NEW ENCRYPT
1 domain.de 2020-09-21 3 1 1 2 1 NEW ENCRYPT
1 domain.de 2020-09-21 1 1 1 3 1 NEW ENCRYPT
1 domain.de 2020-09-21 2 1 1 3 1 NEW ENCRYPT
1 domain.de 2020-09-21 3 1 1 3 1 NEW ENCRYPT

Warum?
Weil jetzt wieder für jeden Datensatz die join Bedingung erfüllt ist. Das bedeutet der gesamte Datensatz aus Join1 Datensatz1 wird mit dem Datensatz aus ssl_info gejoint. Daraus entstehen halt 3*3 Datensätze.
(1 domain.de 2020-09-21 1 1 1) wird jeweils gejoint mit (1,1,ENCRYPT), (2,1,NEW ENCRYPT), (3, 1, NEW ENCRYPT) usw..

Dadurch bekommst du halt viele Datensätze zusammen, weil deine Join Bedingung auf alle Einträge gültig ist.


Eventuell solltest du dir nochmal deine Join Bedingung anschauen und dir überlegen, was du dort eig machst und was du vorhast. Ich habe leider keinerlei Plan, was du am Ende haben möchtest.

Edit: Für schnelle Fragen kannst du mich natürlich auch gerne in Discord adden.
Wollte das so haben:
domain | ssl_check | ssl_name
domain.de 1 ENCRYPT
domain.de 1 NEW ENCRYPT
domain.de 1 NEW ENCRYPT

das er das nicht immer mal 3 oder mal 7 macht. einfach die neusten ergebnisse mit anderen Tabellen wo die gleiche domain name oder domain id ist
Cc_Cc_Cc is offline  
Old 09/21/2020, 19:34   #11




 
Shino's Avatar
 
elite*gold: 100
Join Date: Jan 2008
Posts: 3,580
Received Thanks: 1,366
Also das Ganze geht so in die Richtung debugging.
Als erstes solltest du dir klar sein, was du mit deinen join Bedingungen machst (was ich oben hoffentlich verständlich erklärt habe, wenn nicht einfach nachfragen).

Ein bisschen Overkill aber eine ganz gute Übung ist denke ich mal ein Entity-Relationship Modell für deine (kleine) Datenbank anzulegen. Ist auch sehr gut um die Grundlagen zu lernen. Einfach mal googlen darüber ist viel im Internet.
Dadurch sollte dir bewusst werden wie deine Daten/Tabellen miteinander zusammenhängen und wie man eventuell die Struktur ändern sollte, damit du zu deinem gewünschtem Ergebnis kommen kannst.

Ich habe z.B. keinen Plan wie deine Daten zusammenhängen. Welche Beziehung hat die Tabelle ssl_info zu domain_check? Gibt es für einen Eintrag in ssl_info einen zugehörigen Eintrag in domain_check oder gibt es mehrere? All die Fragen werden durch ein ER Modell geklärt und für jeden verständlich gemacht.
Shino is offline  
Old 09/22/2020, 13:59   #12
 
Legithos's Avatar
 
elite*gold: 95
Join Date: Nov 2009
Posts: 669
Received Thanks: 47
Vielleicht solltest du auch erstmal mit einem JOIN beginnen und dann weitere JOIN's dranhängen, wenn beim ersten JOIN keine fehlerhafte Ausgabe kommt. Dann kannst du den Fehler besser lokalisieren.
Legithos is offline  
Old 09/23/2020, 02:24   #13
 
Cc_Cc_Cc's Avatar
 
elite*gold: 0
Join Date: Mar 2011
Posts: 418
Received Thanks: 17
Quote:
Originally Posted by Legithos View Post
Vielleicht solltest du auch erstmal mit einem JOIN beginnen und dann weitere JOIN's dranhängen, wenn beim ersten JOIN keine fehlerhafte Ausgabe kommt. Dann kannst du den Fehler besser lokalisieren.
Hab wirklich vieles ausprobiert, hab es diesmal so gemacht, er zeigt auch alles richtig an aber er gibt mir nicht die neusten Rekorde bei ssl_info. Er sagt immer den gleichen SSL_Namen.



Das sollte eig dann so aussehen:

1 1 1 1 SSL_TELEKOM
1 1 0 1 SSL_TELEKOM
1 1 1 1 SSL_MEDIA
1 1 1 1 SSL_MEDIA
Cc_Cc_Cc is offline  
Reply


Similar Threads Similar Threads
[FREE] Signature passend zu eurem Avatar | Avatar passend zu eurer Signature
12/29/2018 - Freebies - 38 Replies
Da mein kostenloser Service bis jetzt nur Premium-Mitgliedern vorenthalten war, dachte ich mir, dass ich mein Dienst erweitere und euch Profilbilder und/oder Signaturen kostenlos zur Verfügung stelle. - auch animierte Grafiken sind möglich! Grundsätzlich gilt: Einfach ein Beitrag posten und wenn ich Zeit als auch Lust und Laune finde, kann und werde ich was erstellen. Der Dienst ist kostenlos. Spenden sind gerne gesehen (elite*gold oder PayPal). Spender werden hier im Thread erwähnt....
Einträge lassen sich nicht speichern
07/30/2015 - Metin2 Private Server - 2 Replies
Tag Epvp, Ich schildere mal mein Problem: Wenn ich z.b. in der Item_Proto Tabelle und irgendwie auch nur in der Item_Proto Tabelle was ändere,wie z.b. den Damage der Waffen und die Bonis der Rüstungen wird dies nach einem Reboot direkt wieder zurückgesetzt d.h. nachdem ich ein Reboot gemacht habe wird der Damage und die Bonis der Sachen wieder zurückgesetzt,die davor in der Tabelle eingetragen waren. Also: Schwert+9 z.b. 140-150AW ich ändere es zu 160-170 nach dem Reboot steht dort...
Bing indexiert meine Blog Einträge nicht
06/26/2013 - Web Development - 1 Replies
Hallo, ich habe ein Wordpress Blog und schon viele Eingräte, allerdings indexiert Bing meine Beiträge nicht. Mein Blog ist nun schon c.a 4 Monate online und auf Bing findet sich kein Beitrag bis auf meine Startseite. Woran könnte das liegen?
[kleines HowTo]Neue Up-Einträge beim Schmied, nicht Sura
07/27/2010 - Metin2 Private Server - 3 Replies
Hey epvp, da dies mein erstes Mini HowTo ist bitte nicht zu hart sein ;) habe über SuFu nichts gefunden, also mach ichs einfach. Ihr kennt es doch, das wenn ihr etwas neues upbar machen wollt (z.B. Gifti zu schwert +9 ^^) dann kann es immer nur beim OT-Sura geupt werden. Um etwas beim Schmied upen zu können, einfach in der refine_proto bei id kein 501, 502 etc sondern mit einer 3 anfangen (bsp 399) dann kann man beim Schmied upen. Es ist mir grade egal ob ihr das schon wusstet oder...



All times are GMT +1. The time now is 11:36.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.