Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在合并两个表后消除重复项?_Sql_Database_Oracle_Oracle11g_Sqlplus - Fatal编程技术网

Sql 如何在合并两个表后消除重复项?

Sql 如何在合并两个表后消除重复项?,sql,database,oracle,oracle11g,sqlplus,Sql,Database,Oracle,Oracle11g,Sqlplus,我是sqlplus新手。我需要消除重复项。也就是说,我不想要两个表的组合 select CLUB.NAME as Club_NAME, CLUB.PHONE as Club_PHONE, CUSTOMER.FIRSTNAME as CUST_NAME, CUSTOMER.PHONE as CUST_PHONE, from CUSTOMER,CLUB ; 我只希望俱乐部名称有电话号码和相同的客户(名称和电话)从不同的表(俱乐部和客户)。而不是有组合 我不能使用group by

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

 select CLUB.NAME as Club_NAME,
   CLUB.PHONE as Club_PHONE,
   CUSTOMER.FIRSTNAME as CUST_NAME,
  CUSTOMER.PHONE as CUST_PHONE,
 from CUSTOMER,CLUB ;
我只希望俱乐部名称有电话号码和相同的客户(名称和电话)从不同的表(俱乐部和客户)。而不是有组合

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

group by Club_NAME,CUST_NAME;
(ORA-00979:非表达式分组)


请帮忙

您可以使用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 ;

看到这个了吗

后面有逗号@RajathAradhya;您的客户会将您引导到错误消息中出现问题的那一行和那一列。我重新阅读了这个问题,我不确定他是指那种重复的问题。他不想要密码。但你是对的,如果有客户和俱乐部的名字和电话号码相同,他们会被退回@拉贾塔拉迪亚。就像现在对你有用一样?
从c中选择a、b
是无效语法@Rajath;将其更改为
从c中选择a、b
。“少了一个逗号。”菲利佩·席尔瓦你明白我的问题,但我在你的回答中犯了错误code@filipe席尔瓦:不,不是。