Oracle Query从两个不同的表中加入,没有重复的条目

问题描述 投票:-2回答:4

我需要一个根据以下要求的选择查询。

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

请提供相同的查询。

oracle oracle11g
4个回答
0
投票

“没有重复的条目”

您的数据不包含重复条目。有一个UID(deviceid),每行包含fnamelname的不同值。好的,它们仅在案例方面有所不同,但Oracle RDBMS区分大小写(默认情况下)。所以这些行是不同的。

也许您的应用程序需要mobileno上的唯一键?如果是这样,您需要指定一个规则来选择要键入哪一行以及丢弃哪一行。所以,像这样:

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
投票

在您的选择查询中使用distinct关键字。那应该做。

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
投票

这样的事情对你有用。

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
投票

似乎table2table1DealerCode的查找表(并且我认为它是table2的主键列,并且在table1指出table2DealerCode列的外键)。然后,您可以在没有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);
© www.soinside.com 2019 - 2024. All rights reserved.