2017-07-16 108 views
0

我写这个SQL查询,当你看到场ART_ID将在画面重复,我正在寻找另一种方式来写,而不该领域被反复SQL请求重复场

SSELECT * 

       FROM 
    (SELECT R.rng_id AS rang_id, 
       R.RNG_WHS AS RNG_WHS, 
       R.rng_sortie AS rng_sortie, 
       R.rng_start AS rng_start, 
       R.rng_end AS rng_end, 
       R.RNG_ACTIF_DATE AS RNG_ACTIF_DATE, 
       D.dest_type, 
       D.dest_region, 
       R.ART_ID 

    FROM P_STG_POSA.gss_range R 
    INNER JOIN P_STG_POSA.GSS_DESTINATAIRE D ON R.rng_sortie_whs = D.dest_id 
    WHERE rng_inactif='A') R 

    INNER JOIN 
    (SELECT ART_ART_LIBELLE, ART_ID 
    FROM P_STG_POSA.GSS_ARTICLE 
    WHERE art_type_id= 'S4') A 
    ON R.art_id=A.art_id 
+0

哪里这个'ART_ID'重复?我只能发现一次。如果你不想要它,只需不要选择它。 – dnoeth

+0

我编辑的代码,对不起 –

+0

Teradata的犯规supprt标准SQL的'JOIN USING'这将返回只有一次连接列。因此你需要列出你想要的列而不是'*'。或者,您不使用派生表并将其写入单个Select中。 – dnoeth

回答

0

Select *回报所有列,并作为art_id存在两次,它将被返回两次。相反*列表的要返回的列。

使用Select *一般是一个坏主意无论如何;它可以有性能问题,让您的数据很难用于其他应用程序。

使用select *也意味着,如果底层表改变某个特定查询返回将更改列,这可能会产生严重的负面影响。