[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2007
    Beiträge
    15

    SQL: JOIN mit prioritäten

    hallo,
    ich habe ein meiner meinung nach in sql nicht lösbares problem, trozdem will ich dieses problem schildern einmal schidlern, vieleicht gibt es ja doch eine lösung.
    erstmal ein beispiel:
    Code:
    SELECT * FROM tabelle1 a LEFT JOIN tabelle2 b ON (a.feld1 = b.feld1 AND a.feld2 = 'text1')
    die beiden tabellen sind ja über (a.feld1 = b.feld1 AND b.feld2 = 'text1') verknüpft.
    jetzt könnte es aber sein, das er hierbei in der tabelle2 (b) keine einträge findet.
    gibt es eine möglichkeit für den fall das er in tabelle2 nichts findet, nicht nach 'text1' sondern nach 'text2' abzufragen?
    (sozusagen abfrageprioritäten zu verwalten "wenn nicht das, dann das")

    ich hoffe das es eine lösung gibt(außer einen RIGHT JOIN daraus zu machen und mit zweiten SELECT per UNION zu verbinden)

    vielen dank schonmal im vorraus
    axel

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    wenn deine Tabelle1 einen primary key hat, müsste es mit coalesce und zwei subselects in der Where clause gehen,
    select ... join ... an b.feld2 = coalesce ((select feld2 from tabelle1 i where a.key = i.key and feld2 = 'text1'), (select feld2 from ... and feld2 = 'text2'))
    Das könnte man auch auflösen in zwei zusätzliche Joins.
    Auch der Einsatz einer Function wäre denkbar.
    Frei nach Theorie müsste es für die Query Engine zwar egal sein welche Variante man wählt, aber das ist einer der Fälle, wo ich da so meine Bedenken habe, ob das brummt. So eine ähnliche Struktur habe ich von einer mehrsprachigen Datenbank mit default Language in Erinnerung (nimm den Text in der Sprache des Benutzers, wenn das nicht geht, dann die Sprache der Applikation, wenn das auch nicht geht, dann die Default Language), das war letztlich dann funktional abgebildet am schnellsten, alles andere war fatal.

    D*B


    Zitat Zitat von h-net Beitrag anzeigen
    hallo,
    ich habe ein meiner meinung nach in sql nicht lösbares problem, trozdem will ich dieses problem schildern einmal schidlern, vieleicht gibt es ja doch eine lösung.
    erstmal ein beispiel:
    Code:
    SELECT * FROM tabelle1 a LEFT JOIN tabelle2 b ON (a.feld1 = b.feld1 AND a.feld2 = 'text1')
    die beiden tabellen sind ja über (a.feld1 = b.feld1 AND b.feld2 = 'text1') verknüpft.
    jetzt könnte es aber sein, das er hierbei in der tabelle2 (b) keine einträge findet.
    gibt es eine möglichkeit für den fall das er in tabelle2 nichts findet, nicht nach 'text1' sondern nach 'text2' abzufragen?
    (sozusagen abfrageprioritäten zu verwalten "wenn nicht das, dann das")

    ich hoffe das es eine lösung gibt(außer einen RIGHT JOIN daraus zu machen und mit zweiten SELECT per UNION zu verbinden)

    vielen dank schonmal im vorraus
    axel
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Oder vielleicht etwas verkürzt, in etwa so:

    SELECT * FROM tabelle1 a LEFT OUTER JOIN tabelle2 b ON a.feld1=b.feld1 AND b.feld2 = (SELECT MIN(i.feld2) FROM tabelle2 i WHERE a.feld1= i.feld1 AND feld2 IN ('Text1', 'Text2'))

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    oder (vorausgesetzt, dass Text1 < Text2 ist und dass von Tabelle2 alle Spalten benötigt werden:

    PHP-Code:
    With x as (Select Fld1Min(Fld2MinFld2
                 from Tabelle2
                 where Fld2 in 
    ('Text1''Text2')
                 
    Group By Fld1),
         
    as (Select a.*
                 
    from Tabelle2 a join x 
                      on    a
    .Fld1 x.Fld1 
                        
    and Fld2   MinFld2)
    Select 
       
    from Tabelle1 z left outer join y
            on z
    .Fld1 y.Fld1 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. SQL inner join
    By Robi in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 22-06-07, 15:52
  2. SQL left join
    By ahingerl in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 08-12-06, 08:28
  3. SQL - Join mit Bedingung und Update
    By cassi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 22-11-06, 15:03
  4. SQL JOIN
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 19-10-06, 07:56
  5. MS Access ODBC mit JOIN: SQL FEHLER666
    By olafu in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-10-06, 08:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •