php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.08.2004, 08:59  
Erfahrener Benutzer
 
Registriert seit: 30.07.2004
Beiträge: 255
Stümper
Standard Subquery nötig?

Hallo zusammen,

ich habe eine Frage bezüglich des Themas 'Subquery'. Da ich MySQL Version 4.0.18 verwende und diese nicht upgraden kann, steht mir diese Funktionalität leider nicht zur Verfügung. Zu meinem Problem:

Ich habe drei Tabellen a, b und c. Tabelle a soll vollständig ausgegeben werden, von b und c sollen nur diejenigen Datensätze erscheinen, deren Verbundattribut mit dem Fremdschlüssel in a übereinstimmt. Zwischen b und c findet also kein Matching statt. Es ist einfach, diese Operation mit a und b oder a und c auszuführen: ich kann einfach LEFT JOIN verwenden. In diesem Fall werden b oder c in Abhängigkeit von a ausgegeben, a jedoch vollständig.

Ich brauche jetzt quasi zwei LEFT JOIN Statements zwischen a und b bzw. a und c. Wie kriege ich das ohne Subquery hin? Hilfstabelle erzeugen?
Stümper ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 31.08.2004, 09:32  
Gast
 
Beiträge: n/a
Standard

wenn deine relations ca. so aus sehen,

Code:
table_a
--------
id, content1

talbe_b
--------
id, a_id, content2

table_c
-------
id, a_id, content3
solltes es ca so gehen..

Code:
select a.id, a.content1, b.id, b.content2, c.id, c.content3 form
table_a a
left outer join table_b b
on a.id = b.a_id
left outer join talbe_c c
on a.id = c.a_id
einfach zwei mal left outer join verwenden..
  Mit Zitat antworten
Alt 31.08.2004, 09:42  
Erfahrener Benutzer
 
Registriert seit: 30.07.2004
Beiträge: 255
Stümper
Standard DANKE!

Besten Dank, funktioniert einwandfrei.

Nur: was ist denn der Unterschied zwischen LEFT JOIN und LEFT OUTER JOIN?

Und: dürfte man auch das LEFT JOIN Statement zweimal verwenden?

Und was ist dann mit INNER JOIN? Sind hier die Tabellen 'gleichberechtigt'?
Stümper ist offline   Mit Zitat antworten
Alt 31.08.2004, 10:06  
Gast
 
Beiträge: n/a
Standard

beim left join werden nur datensätze angezeigt, die beide kriterien erfüllen.. ist bei der "left" talbe ein wert NULL oder gibt es in der "rigth" table dazu keinen eintrag, wird dieser beim join nicht angezeigt..

dazu siehst du dir am besten mal das dokument meines dozenten (Marcel Pfahrer) an.. anschliessend solltest du im klaren sein, über die verschiedenen joins..
http://www.hta-bi.bfh.ch/~prm/dbs/RelationalJoins.pdf
  Mit Zitat antworten
Alt 31.08.2004, 10:12  
Erfahrener Benutzer
 
Registriert seit: 30.07.2004
Beiträge: 255
Stümper
Standard äh... ich bins nochmal

Doch noch eine Frage:

Wenn ich nun die geschilderte Abfrage etwas abändern möchte, würde das auch ohne Subquery gehen?

Tabelle b soll vollständig ausgegeben werden, a in Abhängigkeit von b und von c möchte ich nur diejenigen Datensätze, die denen von a entsprechen.

Das kann ich ja nicht mit der Verwendung von zwei LEFT OUTER JOIN Statements lösen, da ich von b alle Datensätze will, von a aber nur diejenigen, die denen von b entsprechen. Also kann c zu a nicht in einer Abhängigkeitsbezeihung stehen.

Die Beziehung zwischen a, b und c beschreibe ich zusammenfassend so:

- Zwischen b und a besteht eine LEFT JOIN Beziehung, wobei a von b abhängig ist.

- Zwischen a und c besteht eine INNER JOIN Beziehung, allerdings muss a auch ausgegeben werden, wenn in c keine entsprechenden Datensätze exisitieren. Es ist aber auch keine LEFT JOIN Beziehung, da ja a in Abhängigkeit von b ausgegeben werden soll.
Stümper ist offline   Mit Zitat antworten
Alt 31.08.2004, 10:29  
Gast
 
Beiträge: n/a
Standard

sollte auch gehen ohne subquery..
da ich jez weder die genauen relationen von dir kenn, noch eine db zum testen hab, so aus dem stehgriff mal..

Code:
select a.*, b.*, c.* from table_b b
left outer join talbe_a
on a.b_id = b.id
left outer join table_c
on c.a_id = a.id
ich glaub du solltest nur die on-klauseln ändern müssen..

(sollte es nicht klappen, kannst mich per pm kontaktieren.. dann können wir es konkret an deinem beispiel probieren.. es sei den, du willst die creates und n paar einträge hier posten.. )
  Mit Zitat antworten
Alt 31.08.2004, 10:51  
Erfahrener Benutzer
 
Registriert seit: 30.07.2004
Beiträge: 255
Stümper
Standard du hattest (wieder einmal) recht ...

Besten Dank!

Funktioniert! Aber ich verstehe das Statement nicht wirklich. Ich kann mir nicht vorstellen, wie der LEFT OUTER JOIN abläuft, wenn im ON Statement auf eine andere Tabelle verwiesen wird.

Wie stellst Du Dir eine solche Abfrage vor?
Stümper ist offline   Mit Zitat antworten
Alt 31.08.2004, 11:29  
Gast
 
Beiträge: n/a
Standard

also ehrlichgesagt, ich musste auch ein bisschen raten..
aber du kannst dir vorstellen, du musst dem dbms schritt für schritt sagen was es tun soll..

vielleicht ist das bsp nicht das beste.. aber so auf die schnelle..

z.b.
Table b: PersonenID, KantonID (Bundesland)
Table a: KantonsID, Kantonsname, VorwahlID
Table c: VorwahlID, Vorwahl

die beziehungen sind klar erkennbar.. von der person, kannst du nicht auf die vorwahl schlissen.. jedoch über wohnort und kanton kannst du aufdie vorwahl schliessen..

dann sieht es ca. so aus:

Beim ersten Befehl sagst du dem DBMS..
Nimm alle Einträge aus der Tabelle b.. (Gib mir alle Personen aus)

Result:
A->b
B->z
C->b

Anschliessend schaust du in der Tabelle a, für welche Tupels es einen Bezug zu Tabelle b gibt.. sprich welchem Kanton entspricht die ID (bezug zwischen b und a)

Result:
A->b->Bern->vw_b
B->z->Zuerich->vw_z
C->b->Bern->vw_b

Nun schaust du, was der entsprechnede Kanton für ne Vorwahl hat..
Du schaust welche tupels deiner abfrage einen bezug zu tabelle c haben.. (bezug zwischen a und c)

Result:
A->b->Bern->vw_b->033
B->z->Zuerich->vw_z->01
C->b->Bern->vw_b->033
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySQL Subquery Abfrage Kevz Datenbanken 6 09.05.2008 09:30
Subquery simsalabim Datenbanken 4 15.04.2008 23:16
ORDER BY im Subquery cycap Datenbanken 12 31.10.2007 20:31
UPDATE mit Subquery cycap Datenbanken 6 27.09.2007 14:25
Subquery als komplettes Ergbnis ausgeben? stefanjann Datenbanken 7 03.05.2006 15:26
UNION in einem Subquery Datenbanken 0 26.10.2005 13:24
Subquery gibt NULL, wenn mehr als eine Zeile in Tabelle tapferesschneiderlein Datenbanken 8 31.07.2005 22:36
subquery Problem Datenbanken 8 18.03.2005 16:49
Subquery kurios..wie gehts richtig? PHP Tipps 2005 4 04.01.2005 20:24
[Erledigt] Select Statement mit exists subquery Datenbanken 5 09.12.2004 10:24

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql query subselect notwendig, subquery in left join, mysql outerjoin auf subselect, left join statt unterabfrage verwenden, unterschied subselect inner join, mysql unterschied subselect zwei queries, left outer join zweimal, subselect unterschied join, unterschied union join subselect, mysql subselect in outer join, weder join noch subquery verwendet, was ist subquery, zweimal left outer join, mysql subquery abhängig, beziehung zwischen b und c bestehen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:40 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.