КАК ВНУТРИ СОЕДИНИТЬ только одну строку из второй таблицы - PullRequest
0 голосов
/ 08 февраля 2019

У меня проблема с присоединением только одной строки из второй таблицы

оператор:

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

TABLE EAN иногда имеет 2 записи, поэтому я получаю

ART.ARTNR

удвоилось на выходе.

Я не могу найти выход, чтобы включить только одну строку из EAN

Я пытался с группой по, но это не сработало, потому что мне нужен образец * select

данные: https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=3f0a57795fdeb6745155a6e823643c40

Теперь, если я выполню свое заявление, оно будет показано 2 раза ART.ARTNR 1234556 и 2 раза 23455, но этого не должно быть, каждый ARTNR должен быть показан один раз

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

избегать разделения через запятую, использовать явное соединение и аналитическую функцию 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
0 голосов
/ 08 февраля 2019
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
0 голосов
/ 08 февраля 2019

Попробуйте

SELECT ART.*, EAN.*, EAN.ARTNR "EAN_ARTNR"
 FROM SUCH.ART ART,(select distinct * from SUCH.EAN) EAN 
 WHERE ART.ARTNR = ean.unit_artnr
 and ean.typ = 'LE4' ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...