2016-06-02 18 views
-2

Wie kann ich die lieferanten_nr (aus artikel) durch den Namen (aus lieferanten) ohne Subselects und Joins ersetzen?Spalte ersetzen in Oracle SQL

Ich muss den Namen der lieferanten angeben und die lieferanten_nr von artikel durch den Namen ersetzen.

1.Table

select bezeichnung, lieferanten_nr from artikel; 

2.Table

select lieferanten_nr, name from lieferanten; 

enter image description here


statt lieferanten_nr dort haben den Namen

+1

was meinst du genau? – SSD

+0

bieten ein Beispiel. meinst du das Aktualisieren von Werten ?? – SSD

+0

'ohne Subselects und Joins' - Sie können nicht. Sie müssen die beiden Tabellen in irgendeiner Weise entweder durch einen Join oder durch eine korrelierte Unterabfrage verbinden. – MT0

Antwort

2

Aufgrund der künstlichen Beschränkungen nicht sein verbindet oder Unterabfragen ist dies über die nächste könnte ich UNION bekommen verwenden (und unter der Annahme, dass keine Unterabfragen bedeuten keine korrelierten Unterabfragen):

SELECT bezeichnung, 
     name 
FROM (
    SELECT bezeichnung, 
     LEAD(name) IGNORE NULLS OVER (PARTITION BY lieferanten_nr 
              ORDER BY name NULLS FIRST) AS name 
    FROM (
    SELECT lieferanten_nr, 
      bezeichnung, 
      NULL AS name 
    FROM artikel 
    UNION ALL 
    SELECT lieferanten_nr, 
      NULL, 
      name 
    FROM lieferanten 
) 
) 
WHERE bezeichnung IS NOT NULL 
AND name  IS NOT NULL; 

Wenn Sie die Einschränkung von nicht ignorieren tritt dann wird es sehr einfach:

select a.bezeichnung, 
     l.name 
from artikel a 
     INNER JOIN 
     lieferanten l 
     ON (a.lieferanten_nr = l.lieferanten_nr); 
+0

Wie gesagt, ich war der Ansicht, dass korrelierte Unterabfragen nicht zulässig sind, sonst beginnt man, alles abzulehnen und die Antwort auf die Frage lautet "es ist nicht möglich". – MT0

+0

das funktioniert nicht –

+0

@HansBaum Wie funktioniert es nicht? – MT0