2017-03-15 43 views
0

我有這個表:enter image description here搜索多個表的外鍵

,我需要從表中得到「諾姆」那是在本每年銷售(從vendas - >數據列)「produtos」 。我怎樣才能把這些表格關聯起來?我知道我必須使用外鍵...

+1

這是一個簡單的'JOIN'。任何SQL教程都應該解釋如何連接表。 – Barmar

回答

0

不需要外鍵約束。

關係數據庫通過在列中存儲常用值來建立行之間的「關係」。

你能編寫一個查詢返回vendas中代表「當前年銷售額」的行嗎?

SELECT v.id 
    FROM `vendas` v 
WHERE ... 

你能那麼寫返回同一組,與來自produtos_vendidos匹配的行沿查詢?

SELECT v.id 
    , pv.id_venda 
    , pv.id_produto 
    FROM `vendas` v 
    JOIN `produtos_vendidos` pv 
    ON pv.id_venda = v.id 
WHERE ... 

一旦你有,你可以添加一個加盟produtos

SELECT v.id 
    , p.* 
    FROM `vendas` v 
    JOIN `produtos_vendidos` pv 
    ON pv.id_venda = v.id 
    JOIN `produtos` p 
    ON p.id = pv.id_produtos 
WHERE ... 

這很可能,這將返回行的多個副本produtos

要消除這些重複項,我們可以使用GROUP BY子句,或者我們可以重寫查詢。

一種可能的方法是對相關子查詢使用EXISTS謂詞。下面是一個例子:

SELECT p.* 
    FROM `produtos` p 
    WHERE EXISTS (SELECT 1 
        FROM `vendas` v 
        JOIN `produtos_vendidos` pv 
        ON pv.id_venda = v.id 
        WHERE pv.id_produtos = p.id 
        AND ... 
       ) 

還有其他的查詢模式會返回等價的結果。