-
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
-
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 von h-net
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
-
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'))
-
oder (vorausgesetzt, dass Text1 < Text2 ist und dass von Tabelle2 alle Spalten benötigt werden:
PHP-Code:
With x as (Select Fld1, Min(Fld2) MinFld2
from Tabelle2
where Fld2 in ('Text1', 'Text2')
Group By Fld1),
y 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
Similar Threads
-
By Robi in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 22-06-07, 15:52
-
By ahingerl in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 08-12-06, 08:28
-
By cassi in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 22-11-06, 15:03
-
By steven_r in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 19-10-06, 07:56
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks