如何仅从第二个表进行INNER JOIN

时间:2019-02-08 12:19:34

标签: sql oracle join group-by inner-join

我在连接第二张表中的仅一行时遇到问题

声明:

 SELECT ART.*, EAN.*
   FROM ART,EAN 
  WHERE ART.ARTNR = ean.unit_artnr
    AND ean.typ = 'LE4';

表EAN有时有2个条目,所以我得到了

  

ART.ARTNR

在输出中加倍。

我想不出办法只包含EAN中的一行

我尝试了分组方式,但这并不能解决问题,因为我需要*选择

样本数据:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=3f0a57795fdeb6745155a6e823643c40

现在,如果我执行我的语句,它将显示2次ART.ARTNR 1234556和2次23455,但这不是每个ARTNR应该显示一次的情况

3 个答案:

答案 0 :(得分:2)

避免逗号分隔的联接,请使用显式联接和分析功能row_number()

  SELECT art.*, EAN.*, 
   EAN.unit_artnr "EAN_ARTNR"
   FROM art join 
   (
   select ean_id,ean,unit_artnr,typ,
   row_number() over(partition by typ order by ean_id)rn from ean
   ) EAN on ART.ARTNR = ean.unit_artnr
   WHERE 
    EAN.typ = 'LE4' and EAN.rn=1

答案 1 :(得分:1)

尝试

last_Check_in.check_out = System.currentTimeMillis();
// this can easily be manipulated if a user changes time in settings

答案 2 :(得分:1)

select ART.*, EANC.*
from ART
  inner join (select EAN.EAN_ID,
                     EAN.EAN,
                     EAN.UNIT_ARTNR,
                     EAN.TYP,
                     row_number() over (partition by EAN.UNIT_ARTNR order by EAN.EAN_ID) as "ROWNR" 
              from EAN) EANC on ART.ARTNR = EANC.UNIT_ARTNR
where EANC.ROWNR = 1

在@Zaynul的回答中分区是正确的,但是他使用了错误的列进行分区。

在我的示例中,我按EANEAN.EAN_ID的行进行排序。如果您要其他顺序,请在此处更改。

示例中的结果是(您可以省略ROWNR)

ARTNR   EAN_ID  EAN         UNIT_ARTNR  TYP     ROWNR
23455   5       7771234568  23455       LE4     1
1234556 1       1234        1234556     LE4     1
相关问题