我在连接第二张表中的仅一行时遇到问题
声明:
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应该显示一次的情况
答案 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的回答中分区是正确的,但是他使用了错误的列进行分区。
在我的示例中,我按EAN
对EAN.EAN_ID
的行进行排序。如果您要其他顺序,请在此处更改。
示例中的结果是(您可以省略ROWNR)
ARTNR EAN_ID EAN UNIT_ARTNR TYP ROWNR
23455 5 7771234568 23455 LE4 1
1234556 1 1234 1234556 LE4 1