2016-09-21 324 views
1

對不起,如果這太元素,但我不能解決它。不知道如何尋找它的信息之一:SQL查詢從相同ID的不同表中獲取所有數據

我有三個表:

提供商

id_provider name 
---------- ----------- 
100   John 
101   Sam 
102   Peter 

聯繫

id_contact RowNo Email 
---------- ----------- ---------------- 
100   1  [email protected] 
100   2  [email protected] 
101   1  [email protected] 
101   2  [email protected] 

產品

Id_product RowNo Product 
---------- ----------- ------------------------ 
100   1  John’s 1st product 
100   2  John’s 2nd product 
101   1  Sam’s 1st product 
101   2  Sam’s 2nd product 
101   3  Sam’s 3rd product 

我需要aq uery顯示從這樣三個表中的所有數據:

Id name id_contact RowNo Email  Id_Product RowNo Product 

100 John 100   1 [email protected] 100  1 John’s 1st product 
100 John 100   2 [email protected] 100  2 John’s 2st product 
101 Sam  101   1 [email protected]  101  1 Sam's 1st product 
101 Sam  101   2 [email protected] 101  2 Sam's 2nd product 
101 Sam  null  null null   101  3 Sam's 3rd product 
102 Peter null  null null   null null null 

我想所有的連接,但我知道我不能使它發揮作用。

非常感謝

回答

0

您可以使用下面的查詢:

SELECT t1.id_provider AS Id, t1.name, 
     t2.id_contact, t2.cRowNo, t2.Email, 
     t2.Id_product, t2.Product 
FROM Provider AS t1 
LEFT JOIN (
    SELECT COALESCE(id_contact, id_product) AS id, 
      c.id_contact, c.RowNo AS cRowNo, c.Email, 
      p.Id_product, p.Product, p.RowNo AS pRowNo 
    FROM Contact AS c 
    FULL JOIN Product AS p ON p.id_product = c.id_contact AND p.RowNo = c.RowNo 
) AS t2 ON t1.id_provider = t2.id 

查詢在ContactProduct表之間執行FULL JOIN,並將從FULL JOINProvider表導出的表加入。因爲我們無法事先知道這兩個表,ContactProduct,包含每個id最行

一個FULL JOIN是必需的。

0
select * 
from Provider P1 
left join Contact C2 
on C2.id_contact = P1.id_provider 
left join Product P2 
on P2.id_product = P1.id_provider 
0
SELECT prov.*, 
     c.*, 
     prod.* 
FROM PROVIDER prov 
     LEFT JOIN Product prod ON prod.id_product = prov.id_provider 
     LEFT JOIN Contact c ON prov.id_provider = c.id_contact 
           AND prod.RowNo = c.RowNo 

使用左聯接,但加盟商對產品第一,然後聯繫

SQL Fiddle Demo

相關問題