2016-02-27 70 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

相關問題