2017-12-21 17 views
-2

아래 요구 사항에 따라 선택 쿼리가 필요합니다.Oracle 중복 항목이없는 두 개의 다른 테이블에서 조인 쿼리

Table 1: 

    DEVICEID MobileNo DealerCode FNAME LNMAE 
    1   1234  11   test test 
    2   1234  11   TEST tESt 

Table 2: 

    DealerCode DEALERNAME 
    11   JON 
    12   DOE 

Output: 

    MobileNo DealerCode NAME  DEALERNAME 
    1234  11   test test JON 

나에게 같은 질문을하십시오.

+1

누군가가 데이터를 형식화하여 SO 마크 다운에서 렌더링되었습니다. 그런 다음 편집 결과를 다시 읽을 수 없게되었습니다. 제발 그만 하지마. – APC

답변

0

귀하의 데이터 "중복 된 항목없이"중복 된 항목 포함되어 있지 않습니다. UID (deviceid)가 있으며 각 행에는 fnamelname에 대해 다른 값이 들어 있습니다. 오라클은 대소 문자가 다르지만 Oracle RDBMS는 대소 문자를 구분합니다 (기본적으로). 그래서 그 행은 다릅니다.

아마도 응용 프로그램에 mobileno에 고유 키가 있어야할까요? 그렇다면 규칙을 지정하여 입력 할 행과 삭제할 행을 선택해야합니다. 그래서,이 같은 : 그것은 table2 보인다

select p.mobileno 
     , p.dealercode 
     , p.fname || ' ' || p.lname as name 
     , d.dname as dealername 
from phone p 
    join dealer d 
      on d.dealercode = p.dealercode 
where p.deviceid = (select min(x.deviceid) 
        from phone x 
        where x.mobileno = p.mobileno) 
/     
0

다음과 같은 내용이 도움이 될 것입니다. 당신의 선택 쿼리에서

SELECT MIN (MobileNo) MobileNo, 
     MIN (a.DealerCode) DealerCode, 
     MIN (FNAME || ' ' || LNMAE) NAME, 
     MIN (b.DEALERNAME) DEALERNAME 
    FROM Table1 a JOIN Table2 b ON a.DealerCode = b.DealerCode; 
0

사용 별개의 키워드. 그렇게해야합니다.

select distinct t1.mobile_no, t1.dealer_code, t1.fname, t1.lname, t2.delear_name 
from table1 t1 
join table2 t2 on t1.dealer_code = t2.dealer_code; 
0

table1에 대한 룩업 테이블의 DealerCode (그리고 내가 그것을 table2에 기본 키 열이고 table2 지적 table1 외국 키가 가정의 DealerCode 열입니다). 그런 다음 too_many_rows 예외없이 시도해 볼 수 있습니다.

SELECT t1.mobileno, t1.dealercode, lower(t1.fname||' '||t1.lnmae) name, 
     (select t2.dealername from table2 t2 where dealercode = t1.dealercode) dealername 
    FROM Table1 t1 
    GROUP BY t1.mobileno, t1.dealercode, lower(t1.fname||' '||t1.lnmae);