Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> Suche Mysql-Query
MarkusH
Geschrieben am: Fr 7.03.2008, 15:03
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 79
Mitglied seit: 2.11.2006


Hallo,

ich suche eine Mysqlquery:
Alle Einträge aus Tabelle A werden angezeigt die passenden Einträge aus Tabelle B
beispiel:

A
-------------
|id|name|
|1 |Test1|
|2 |Test2|
|3 |Test3|
-------------

B:
-------------
|id|fid|RES|
|1 |1|ERG1|
|2 |3|ERG2|
-------------

fid ist der Fremschlüssel zu Tabelle A

Das Ergebnis soll sein:

-----------------
|id|name|RES|
|1 |Test1|ERG1|
|2 |Test2|NULL|
|3 |Test3|ERG2|
------------------

Ich habs mit einem einfachen Left Join probiert, das klappt aber leider nicht.

Grüeß und danke im Vorraus
Top
PM
Top
 
 
Daniel Cieslar
novinet Websolutions
#2 Geschrieben am: Fr 7.03.2008, 15:47 (+00:43)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 759
Mitglied seit: 3.10.2005


select * from A join B on A.id = B.fid

;-)

Gruß, D.


--------------------
...bald verheiratet und mit neuem Namen: ab 06.12.2008 Daniel Steffen

www.calcolo.de - Calcolo 3.0 mit PDF-Rechnungen, Angebote, Mahnungen,...

www.webspiration.de - interaktive Werbemittel: Pagepeel, Curtain, Rotator, Carousel

novinet Software, Design, Consulting - wir erstellen Ihren maßgeschneiderten Internetauftritt
Top
PMEmail PosterUsers WebsiteICQ
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#3 Geschrieben am: Fr 7.03.2008, 15:47 (+00:00)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2409
Mitglied seit: 4.02.2006


QUOTE (MarkusH @ Fr 7.03.2008, 15:03)
Ich habs mit einem einfachen Left Join probiert, das klappt aber leider nicht.

Dann poste mal, was Du gemacht hast.

Ein 'einfacher LeftJoin' ist eigentlich genau das Richtige dafür.


--------------------
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.
Top
PMEmail PosterUsers Website
Top
 
MarkusH
#4 Geschrieben am: Fr 7.03.2008, 19:37 (+03:49)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 79
Mitglied seit: 2.11.2006


Hi,

wie so oft, saß ich ne halbe Stunde daran und habe es nicht gebacken bekommen. Kaum habe ich die Frage formuliert und gepostet, fiel mir die Lösung ein.

Die Crux war eine Where-Clause, die sich auf die "rechte" Tabelle bezog, dadurch konnten natürlich keine entsprechenden Datensätze gefunden werden, da es keinen Datensatz rechts gab, mit dem man links joinen konnte. Ich habe nun einfach den entsprechenden Teil in die ON-Bedingung verlagert (ON a.id=f.id AND RES='ERG3') nun klappts.

Danke trotzdem für Eure Hilfe.

Grüße
markus
Top
PM
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#5 Geschrieben am: Fr 7.03.2008, 21:04 (+01:26)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2409
Mitglied seit: 4.02.2006


QUOTE (MarkusH @ Fr 7.03.2008, 19:37)
Die Crux war eine Where-Clause, die sich auf die "rechte" Tabelle bezog, dadurch konnten natürlich keine entsprechenden Datensätze gefunden werden, da es keinen Datensatz rechts gab, mit dem man links joinen konnte. Ich habe nun einfach den entsprechenden Teil in die ON-Bedingung verlagert (ON a.id=f.id AND RES='ERG3') nun klappts.

Die Lösung ist korrekt. Aber die Begründung ist an einer (für den Umgang mit Sql entscheidenden) Stelle falsch.

Wenn Du

CODE
Select A.*
From Tabelle1 As A Left Join Tabelle2 As B
On A.Id = B.fId
Where B.RES = 'ERG3'


verwendest, dann wird für die Zeilen mit B.RES = Null die Where-Klausel immer auch Null, also falsch. Damit fliegen alle typischen LeftJoin-Ergebnisse, bei denen die linke Tabelle eine Zeile und die rechte Tabelle nichts liefert, raus - faktisch entspricht das einem InnerJoin, bei dem B.RES = 'ERG3' und B.fId mit einer passenden ID belegt sein muß, die Zeile also existieren muß.

Nutzt Du stattdessen

CODE
Select A.*
From Tabelle1 As A Left Join Tabelle2 As B
On A.Id = B.fId And B.RES = 'ERG3'


dann können für eine Zeile der linken Tabelle beide Bedingungen wegen einem fehlenden rechten Datensatz als Null ausgewertet werden - und die Zeile wird ausgegeben.

Man kann das Problem in manchen Fällen auch über eine Unterabfrage lösen:

CODE
Select A.*
From Tabelle1 As A Left Join
   (Select B.fId
   From Tabelle2 As B
   Where B.RES = 'ERG3') As C
On A.Id = C.fId


Da zieht man die Bedingung in die Unterabfrage rein, diese liefert nur die passenden Zeilen zurück - und für alle 'fehlenden Zeilen' liefert die linke Tabelle eine Zeile.


--------------------
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.
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/23337

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Lost connection to MySQL cr4m0 26 0 Sa 22.11.2008, 10:51
Suche Blogs für Beiträge panterchen 54 0 Fr 21.11.2008, 15:45
Suche Linkpartner am 160 4 Fr 21.11.2008, 15:29
Suche Korinthenkacker – Kritik gebraucht G.P. 177 9 Do 20.11.2008, 16:30
Suche Newsletterwerbung im Bereich Autotuning slayter 70 1 Mi 19.11.2008, 11:04
Suche: Exklusiven Text 100x100 81 0 Di 18.11.2008, 19:52
Frage zu Google-Suche Basti Hoesl 264 6 Di 18.11.2008, 18:25
MySQL Frage G.P. 91 2 Mo 17.11.2008, 15:59
[Suche] Skript freigewordene Domains woody 119 0 Fr 14.11.2008, 09:48




Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]