结合2个表后如何摆脱重复?

时间:2013-07-31 22:17:02

标签: sql database oracle oracle11g sqlplus

我是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表达式)。

请帮忙。

1 个答案:

答案 0 :(得分: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”列,以防您想从数据表中识别数据。如果您不需要它,您可以将其删除。

通过删除该列,这也意味着如果两个表中都有相同的记录,则不会两次。

编辑:

如果你想在不同的列中获得结果,你可以为每个表做单独的查询,或者你可以进行全部联合,并返回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