| Adrian der Grosse |
Geschrieben am: Di 21.11.2006, 16:34
|
|
AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 113 Mitglied seit: 16.08.2005 |
Hallo zusammen,
Ich habe 3 Tabellen: TabelleA TabelleB: Bindeglied zwischen TabelleA und TabelleC TabelleC Zu jedem TabelleA-Datensatz können mehere TabelleC-Datensätze gehören. Ein TabelleC Datensatz kann aber auch zu mehrere TabelleA-Datensätze gehören Nun mein Vorhaben: Select tabelleA.spalteX, (...) from TabelleA join TabelleB on TabelleB.tabA = TabelleA.id join TabelleC on TabelleC.id = TabelleB.tabC where TabelleC.wert = 'beispiel' In TabelleC existierten mehrere Datensätze mit der Spalte wert = 'beispiel'. Das Problem ist nun, dass bei einer Abfrage, einige Datensätze (TabelleA) mehrmals zurückgegeben werden. Ein distinct geht sehr zu lasten der Performance-> möchte ich nicht. Ich denke mal man muss irgendwas an den Join's ändern, nur weiss ich nicht genau was, habe mir vorher damit gleich den mySQL-Server zerschossen Hat jemand einen Tipp? Vielen Dank Adrian -------------------- Mein Leben, ich und andere...
Mein Blog |
![]() |
| Alain_Aubert |
#2 Geschrieben am: Di 21.11.2006, 16:53 (+00:19)
|
|
Ayom Slave Gruppe: Admin Beiträge: 4826 Mitglied seit: 25.09.2003 |
Kannst Du nicht die konkrete query und Beispieldatensätze posten, würde es enorm vereinfachen.
Lesestoff: http://dev.mysql.com/doc/refman/5.1/de/dis...timization.html Evtl. reicht einfach left join, aber ich mag das Beispiel so nicht anschauen, sorry. |
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#3 Geschrieben am: Di 21.11.2006, 19:09 (+02:15)
|
||||
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2432 Mitglied seit: 4.02.2006 |
Ich verwende zwar mySql nicht, habe insofern keine Erfahrung, ob es da spezielle Probleme mit Distinct gibt. Aber richtig vorstellen kann ich es mir nicht, sofern die Grundregeln beachtet sind: - Alle drei Tabellen mit einspaltigem Primärschlüssel (Integer), auch die Verknüpfungstabelle B. - Die Fremdschlüsselspalten in B sollten indiziert sein. Der Join sieht zwar insofern komisch aus, weil ich das konsistent schreibe:
aber ein Optimierer müßte damit auch klarkommen. Zur Not könnte man natürlich, falls die mySql-Version Unterabfragen unterstützt, auch das nutzen:
Aber eigentlich sollten beide Varianten gleich schnell sein. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung. Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert. |
||||
![]() |
| Adrian der Grosse |
#4 Geschrieben am: Di 21.11.2006, 20:09 (+01:00)
|
||||||||||
|
AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 113 Mitglied seit: 16.08.2005 |
@jAuer: Leider bringt dein Tipp nichts
SQL-Abfrage:
Gibt aus:
Was ich gerne hätte:
SQL-Aufbau:
-------------------- Mein Leben, ich und andere...
Mein Blog |
||||||||||
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#5 Geschrieben am: Di 21.11.2006, 20:19 (+00:09)
|
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2432 Mitglied seit: 4.02.2006 |
Aber es ist völlig logisch, daß Du bei einer m:n - Beziehung im Zweifelsfall mehrere Ergebnisse bzw. Ergebniswiederholungen erhälst. Das ist einfach eine Folge der Datenstruktur.
Sprich: Entweder klappt das mit den Unterabfragen (nicht bei älteren mySql) oder Du mußt Distinct nutzen und mit der Performance leben. Abgesehen davon hast Du in der entscheidenden Tabelle B keinen Primärschlüssel. Das braucht dann natürlich lange. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung. Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert. |
![]() |
| PH |
#6 Geschrieben am: Di 21.11.2006, 20:41 (+00:22)
|
|
AyomRank 7 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 1260 Mitglied seit: 29.08.2004 |
mach ein group auf die felder, die zurückgegeben werden, also:
group by id,SpalteA,SpalteB |
![]() |
| Irene irene.ch |
#7 Geschrieben am: Di 21.11.2006, 21:29 (+00:47)
|
||||||
![]() AyomRank 7 Gruppe: Experten Entwicklung (Mod) Beiträge: 1114 Mitglied seit: 3.05.2004 |
Das ist mal schick, mit den Creates und Inserts kann man doch fröhlich ausprobieren ;-) Mir ist noch nicht ganz klar was Du eigentlich willst. Weil wenn Du nur die ID und noch zwei Felder aus TabelleA willst, dann brauchst Du überhaupt keinen Join zum B und zum C. Ohne diesen Join fallen dann auch alle Duplikate weg. Wenn Du aber auch Daten aus TabelleC willst, dann musst Du nen Join machen. Und weil die Relation A zu C eine m:n-Relation ist, kriegst Du auch Duplikate entweder beim A oder beim C (resp. von beidem, je nach vorhandenen Daten). Das lässt sich nicht verhindern, ausser Du holst zwei separate Resultsets und stellst die dann in der Seite entsprechend dar. Griessli Irene -------------------- |
||||||
![]() |
| PH |
#8 Geschrieben am: Mi 22.11.2006, 12:22 (+14:53)
|
|
AyomRank 7 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 1260 Mitglied seit: 29.08.2004 |
ich habe es so verstanden, dass er Duplikate raus haben will.
Group müsste da funktionieren, und bessere Performance haben als Distinct. |
![]() |
| Irene irene.ch |
#9 Geschrieben am: Mi 22.11.2006, 12:46 (+00:23)
|
||
![]() AyomRank 7 Gruppe: Experten Entwicklung (Mod) Beiträge: 1114 Mitglied seit: 3.05.2004 |
Aus meiner Sicht nützt ein Group da auch nichts. Die Felder, deren Werte man sehen will, müssen im "group by" sein, womit wieder Duplikate drin sind. Bei nem Group müssen alle Felder, die nicht Teil des "group by" sind, irgendwie aggregiert werden (Summe, Mittelwert, Grösstes oder Kleinstes, irgendwas halt), und das macht im Normalfall nur bei Zahlenwerten Sinn. Mit
hab ich wieder Duplikate drin. Allerdings benutze ich nicht MySQL, aber ich nehme mal an, dass MySQL die SQL-Standards genauso anwendet wie alle anderen Datenbanken. Griessli Irene -------------------- |
||
![]() |
| PH |
#10 Geschrieben am: Mi 22.11.2006, 13:38 (+00:51)
|
||
|
AyomRank 7 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 1260 Mitglied seit: 29.08.2004 |
es sind ja alle Felder im Group By - es werden keine Felder aggregiert er will ja nur id, spalteA, spalteB im resultset. in seiner Abfrage am Anfang des Threads fehlt nur ein Group: also:
Wenn man ins Select noch ein count(*) hinzufügt, zählt es sogar die Duplikate. |
||
![]() |
| Adrian der Grosse |
#11 Geschrieben am: Mi 22.11.2006, 19:13 (+05:34)
|
||
|
AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 113 Mitglied seit: 16.08.2005 |
Vielen Dank an alle! Nun geht es um einiges schneller! -------------------- Mein Leben, ich und andere...
Mein Blog |
||
![]() |
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
« Bei Klick auf Link einen Wert in Session schreiben | Programmierung Allgemein | print-Befehl unter JAVA-Script »
Trackback-Url: http://www.ayom.com/track/t/15177
![]() |
![]() ![]() ![]() |
| Themen Titel | Autor | Views | Antworten | Letzte Aktion |
| Lost connection to MySQL | cr4m0 | 122 | 4 | So 23.11.2008, 14:31 |
| MySQL Frage | G.P. | 103 | 2 | Mo 17.11.2008, 15:59 |
| Suche Freelancer: Ajax, XML, PHP, MySQL | omc | 316 | 3 | Mi 12.11.2008, 18:22 |
| Einbinden vonn RSS feeds in Typo3 / MYSQL | e-card | 10923 | 5 | Di 4.11.2008, 18:36 |
| MySql Frage - ID Ändern | EuD | 119 | 2 | Di 4.11.2008, 11:09 |
| mysql query vereinfachen | Big Rob | 162 | 5 | Mo 3.11.2008, 22:40 |
| mysql Dump Städte | pl_90 | 159 | 2 | So 26.10.2008, 01:13 |
| MySQL Befehl | G.P. | 170 | 5 | Fr 24.10.2008, 15:58 |
| Lösung für: Content Slider-Java Script-PHP-MySql | Antoine Johannes | 331 | 2 | Fr 26.09.2008, 12:54 |
| PHP + MySQL 2 Fragen an euch | Coach | 194 | 1 | Do 18.09.2008, 10:52 |
Anzeige - [Hier werben / Mediadaten]
















