Daniela Koller: Join

Beitrag lesen

Hi Sohail

es ist so. Es muss erst eine Alfabetische Auflisting von Alle Branchen her, die mit Bezihung zu einem Shop stehen und auch der Shopbetreiber in seinem Shop irgendwelche Artikel hat. Das heisst, die Shops, die Keine Artikel haben oder doch und LKZ=-1 haben mussen nicht angezeigt werdrn.
SO:

ich nehme jetzt einfach mal an, solange nicht alle Artikel eines Shops -1
haben, darf der Shop angezeigt werden. Nur, beim besten willen, das
ist es was deine Query eigentlich tun sollte was ich verstehe.
Bei deinen Beispieldaten müsste sie dir einen Teil drin lassen.
Kannst du irgendwo die Create Statements hochstellen und n Dump
von deine Daten (Ausschnitt reicht), damit man ausprobieren kann?

B D F P R S V

Deine Query sollte genau das erzeugen glaub ich?

Das klappt auch wunderbar ohne die Bedingung ArtikelListe.LKZ<>-1.

Kannst du mal das Feld mit in die Liste nehmen und den Distinct raus?
Einfach das man sieht ob es überhaupt Records gäbe die dem entsprechen.
Also Select bisheriges feld, ArtikelListe.LKZ und die Where clause mal
raus. Den Group by bitte auch raus, der gehört da eh nicht hin.
Ideal wäre auch, wenn du noch die ShopID auch ausgeben könntest dazu.
Falls keine Records in dem Output sind die was anderes als -1 haben
solltest du deinen Datenbestand prüfen ob der wirklich io ist.

Dann damit ausgeschlossen ist das dein Order by doch schuld ist, gib
der ersten Spalte (dem Upper...) mit as einen Namen und verwende
den im Order by.

Select UPPER(Substring(Branchen.Branche,1,1)) as blub, ShopBranchen.ShopID, ArtikelListe.TKZ
  From Branchen
  JOIN ShopBranchen
       ON (Branchen.BranchenID=ShopBranchen.BranchenID)
  JOIN ArtikelListe
       ON (ArtikelListe.ShopID=ShopBranchen.ShopID)
 Order by blub

Ich möchte dich auch gerne bitten, mir etwas über Outer und inner Join zu erzählen. Ich habe es nicht ganz verstanden.

Ist eigentlich ganz einfach, ein inner Join sagt, es muss zu einem
Record von links zwingend auch einen passenden Record rechts haben
damit der linke Teil überhaupt in Frage kommt.

Outer Join heisst, es muss nicht zwingend auf beiden Seiten etwas haben,
also Datensätze der linken Tabelle werden auch mit in die Auswahl genommen
wenn in der rechten Tabelle kein passender Datensatz ist. Dann wird
diese Seite einfach mit null aufgefüllt.

Bsp: Tab 1:
     1    1
     1    2

Tab 2:
     2    blub
     3    asdf

from tab1 inner join tab2 on (tab1.sp2 = tab2.sp1):
1 2 blub, weil nur zu da passen tab1 und tab2 zusammen

from tab1 left outer join on (tab1.sp2 = tab2.sp1):
1 1 null
1 2 blub

from tab1 right outer join on(tab1.sp2 = tab2.sp1):
1    2 blub
null 3 asdf

jeweils tab1.sp1, tab1.sp2 und tab2.sp2 der reihe nach, nur der join
teil aufgelistet.

Gruss Daniela