2016-02-27 72 views
-1

我有两张电子邮件和电话号码存储表。这两个表的确可以参考shop的列shop_id为什么我从这个连接语句中获得重复?

我想要的是从ID = 1的商店获取所有电子邮件,并进一步从同一商店获取电话号码。

SELECT 
    shop_contact_phone.id, 
    shop_contact_phone.shop_id, 
    number, tbl.email 
FROM (
    SELECT * 
    FROM shop_contact_email 
    WHERE shop_id = 1 
    ) AS tbl 
JOIN 
    shop_contact_phone 
ON (shop_contact_phone.shop_id = tbl.shop_id); 

但是,我得到重复项。我在这里做错了什么?

这是我的sqlfiddle

+1

1)子查询是多余的2)准备http://sqlfiddle.com带有示例数据和期望的结果 – lad2025

+3

由于某些商店有多个电话号码和/或多个电子邮件,您将得到重复。示例数据和期望的结果将阐明您在这些情况下要执行的操作。 –

+0

@ lad2025把一个链接到我的问题。 – displayname

回答

1

如果你想要的电话号码和电子邮件的列表,使用union all代替join

select sce.shop_id, 'email' as contacttype, sce.email 
from shop_contact_email sce 
where sce.shop_id = 1 
union all 
select scp.shop_id, 'phone', scp.number 
from shop_contact_phone scp 
where scp.shop_id = 1; 

这使他们在不同的行。您也可以根据您的需要将它们聚合成字符串或数组。

+0

谢谢你指出。我不知道有一个'union all'指令! :) – displayname

相关问题