2017-10-06 23 views
-1

我需要從5個表中取出數據(每個表的所有列)都有FK,這是單表的PK。如何從多個表中選擇某些表在MySQL中爲空時

但一些表可能有記錄可empty.If數據存在相應的列/表應該返回,否則空/默認值

有一對多和一個對一個關係與父表的子表。

我已經試過到目前爲止 - UNION擁有相同數量的列 的關注 - CROSS JOIN不返回任何數據 - 選擇ALL_COLUMN FROM ALL_TABLE WHERE TABLE.FK = ID不返回任何數據 - 左連接工作2桌但不超過

SELECT A.GENDER, B.BLOCKED_USER FROM t_macroworld_registration AS A 
LEFT JOIN t_macroworld_blacklist AS B ON 1=1 WHERE A.ID=15 

我可以在MySQL的視圖中實現這個可能的方式是什麼?

+0

你可以嘗試使用多個LEFT JOIN?另外,當您使用一對多關係連接表時,您的預期行爲是什麼? –

+0

我希望用父表的重複行返回該特定ID的從屬表的所有行 –

回答

0

外連接操作的規範性模式...

SELECT ... 
    FROM a 
    LEFT JOIN b ON b.a_id = a.id 
    LEFT JOIN c ON c.a_id = a.id 
    LEFT JOIN d ON d.a_id = a.id 
WHERE a.id = 15 

它是上外的謂詞重要連接表是ON條款,而不是WHERE子句。如果WHERE子句中有任何謂詞要求來自其中一個外部聯接表的值爲非NULL,那麼將會否定聯接的「外部性」,從而使其成爲內部聯接。

當b,c和d中有多於一個匹配行時,結果爲「大石頭」問題。如果匹配的b有五行,匹配的c有三行,匹配的b有兩行,它會看起來像很多重複。 (回5x3x2 = 30行,有很多關於這些行復制數據。)

-2
SELECT 
w.id,w.name,a.address,i.name,i.quantity 
FROM 
warehouse w 
LEFT JOIN address AS a ON a.warehouse_id = w.id 
LEFT JOIN item AS i ON i.warehouse_id = w.id 
LEFT JOIN order AS o ON o.item_id = i.id 
WHERE 
w.id = 1 
GROUP BY 1,2,3,4; 

會給你的股票和訂單的概述爲您的倉庫。這也會重複一些結果。 假設2個倉庫,1個地址爲每個,每倉庫3項,2個數量由項= 2 * 3 * 2 = 12行

我建議通過階段將您LEFT JOIN階段和可視化用於每個階段的結果。你很快就會明白爲什麼線條正在成倍增長。 請注意表中外鍵和標識符的用法以鏈接表。

祝你好運