【问题标题】:How to get rid of duplicates after combining 2 tables?合并2个表后如何消除重复项?
【发布时间】:2013-07-31 22:17:02
【问题描述】:

我是 sqlplus 的新手。我需要删除重复项。也就是说,我不想要 2 个表的组合。

 select CLUB.NAME as Club_NAME,
   CLUB.PHONE as Club_PHONE,
   CUSTOMER.FIRSTNAME as CUST_NAME,
  CUSTOMER.PHONE as CUST_PHONE,
 from CUSTOMER,CLUB ;

我只想要来自不同表(CLUB 和客户)的客户(姓名和电话)的电话号码和相同的俱乐部名称。而不是组合。

我不能使用 group by,因为我在这里没有使用任何计算

group by Club_NAME,CUST_NAME;

(ORA-00979:不是 GROUP BY 表达式)。

请帮忙。

【问题讨论】:

    标签: sql database oracle oracle11g sqlplus


    【解决方案1】:

    你可以使用 UNION ALL

    SELECT CLUB.NAME as NAME,
       CLUB.PHONE as PHONE, 
       'CLUB' as TYPE
    FROM CLUB
    UNION ALL
    SELECT  CUSTOMER.FIRSTNAME,
      CUSTOMER.PHONE,
      'CUSTOMER'
    FROM CUSTOMER ;
    

    这将为您提供所有客户和俱乐部各自的手机。

    我添加了一个额外的“TYPE”列,以防您想从哪个表中识别数据来自。如果你不需要它,你可以删除它。

    去掉那一列,也意味着如果两个表有相同的记录,就不会得到两次。

    编辑:

    如果你想在不同的列中得到结果,你可以对每个表做单独的查询,也可以做一个union all,并返回4列,但是当你推荐客户时,关于俱乐部的列将是空。

    你可以这样做:

    SELECT CLUB.NAME as CLUBNAME, 
      CLUB.PHONE as CLUBPHONE,
      null AS CUSTOMERNAME,
      null AS CUSTOMERPHONE
    FROM CLUB
    UNION ALL
    SELECT null,
      null,
      CUSTOMER.FIRSTNAME,
      CUSTOMER.PHONE
    FROM CUSTOMER ;
    

    看到这个fiddle

    【讨论】:

    • 后面有逗号@RajathAradhya;您的客户会将您引导至该错误消息中出现问题的行和列。
    • 我重新阅读了这个问题,但我不确定他的意思是那种重复。他不想要这种组合。但你是对的,如果有相同姓名和电话号码的客户和俱乐部,他们会被退回。 @RajathAradhya。喜欢它现在适合你吗?
    • select a, b, from c 不是有效的语法@Rajath;将其更改为select a, b from c。少了一个逗号。
    • @filipe silva 你明白我的问题,但我在你的代码中遇到错误
    • @filipe silva 不,不是。
    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多