替换Oracle SQL中的列

时间:2016-06-02 15:04:39

标签: sql oracle

如何在没有子选择和连接的情况下将lieferanten_nr(来自artikel)替换为名称(来自lieferanten)?

我必须识别lieferanten的名字,并用artikel替换lieferanten_nr。

1.Table

select bezeichnung, lieferanten_nr from artikel;

2.Table

select lieferanten_nr, name from lieferanten;

enter image description here


而不是lieferanten_nr必须有名称

1 个答案:

答案 0 :(得分:2)

鉴于没有连接或子查询的人为限制,这是我可以使用UNION得到的最接近的(假设没有子查询意味着没有相关的子查询):

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;

如果忽略无连接的限制,那么它变得非常简单:

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