2016-03-15 86 views
1

这是我的代码如下。如何连接两个匹配唯一列ID的表?

select cserv.cust_id,serv.service_id,serv.service_name,cserv.cust_id,cserv.channel_id,cserv2.cust_id,cserv2.channel_id 
from services as serv 
left join cust_services as cserv on serv.channel_a=cserv.channel_id 
left join cust_services as cserv2 on serv.channel_b=cserv2.channel_id 
where cserv.cust_id IS NOT NULL 
order by cserv.cust_id 

以下是我的结果图片,它由此查询生成。

enter image description here

以下是问题的图像。问题用红色标记。

enter image description here

我想删除突出显示的记录。我怎样才能做到这一点?请帮帮我。

下面是我的服务表和cust_service表的图片。

服务表: -

enter image description here

cust_service: -

enter image description here

+0

请澄清你想从结果中删除行吗?你想要:cserv.cust_id = cserv2.cust_id? – Ingaz

+0

是的。多数民众赞成在 – ShanWave007

回答

0

我已经与自己的数据集测试这一点,它的出现提供你正在寻找的输出:

SELECT MIN(cserv.cust_id) AS cust_id1 
     ,MIN(serv.service_id) AS service_id 
     ,serv.service_name 
     ,MIN(cserv.cust_id) AS cust_id2 
     ,MIN(cserv.channel_id) AS channel_id 
     ,cserv2.cust_id 
     ,cserv2.channel_id 
FROM services as serv 
    LEFT JOIN cust_services AS cserv ON serv.channel_a=cserv.channel_id 
    LEFT JOIN cust_services AS cserv2 ON serv.channel_b=cserv2.channel_id 
WHERE cserv.cust_id IS NOT NULL 
GROUP BY serv.service_name 
     ,cserv2.cust_id 
     ,cserv2.channel_id 
ORDER BY cust_id1, service_id 

这里是OP的sqlfiddle我与各自的输出答案:http://sqlfiddle.com/#!9/74bc16/2

注意,我改变了cust_id字段的名字,因为他们引起现场不明确的错误,因为他们都命名为同样的事情。现在它们被标记为cust_id1cust_id2,因此您可以按顺序排序。我还在ORDER BY子句中添加了service_id,以便保留原始示例中的顺序;你可以选择以其他方式订购。

+0

我正在做一个示例数据集与您的示例现在要测试。给我几分钟... – sadmicrowave

+0

我测试了这个,它似乎工作。让我知道它是否有帮助,并可用于您的实施。如果它不起作用,我们可以使用另一种解决方案。 – sadmicrowave

相关问题