Mysql
MYSQL:多對多連接
我正在嘗試創建一個視圖並嘗試查看可以做什麼,我有一個主表,一個我想加入的表,還有一個連接表。
Event table (it's very big so it's just dummy data): +----+----------+----------+ | id | somethin | somethin | +----+----------+----------+ | 1 | value | value | +----+----------+----------+ Junction Table: +----+----------+----------+ | id | event_id | label_id | +----+----------+----------+ | 1 | 1 | 1 | +----+----------+----------+ Labels Table: +----+--------+-----------+ | id | name | value | +----+--------+-----------+ | 1 | Name1 | Value1 | +----+--------+-----------+
所以我要完成的工作我不確定是否可能,標籤會有很多不同的名稱和一定數量的值,所以想像一下
+----+--------+-----------+ | id | name | value | +----+--------+-----------+ | 1 | Name1 | Value1 | +----+--------+-----------+ | 1 | Name1 | Value2 | +----+--------+-----------+ | 1 | Name2 | Value3 | +----+--------+-----------+ | 1 | Name2 | Value4 | +----+--------+-----------+
所以這是我希望在連接表上擁有來自事件表的所有數據的棘手部分,除此之外,在標籤名稱和對應於該事件的值之後的列名。像這樣的東西
+----+----------+----------+----------+----------+ | id | Name | Place | Name1 | Name2 | +----+----------+----------+----------+----------+ | 1 | value | value | Value2 | Null | +----+----------+----------+----------+----------+
因此,無論該記錄是否有標籤,名稱列都將存在,但如果沒有任何內容,它將顯示 null 。
甚至可能嗎?
您不能擁有動態調整返回的列數的視圖。這是您需要使用客戶端邏輯實現的東西。至少對於我知道的所有數據庫(你沒有提到你使用哪個數據庫系統)。
您可以在不同的別名下多次連接標籤表,在 where 子句中指定第二個連接的條目不等於第一個。第 3 次的參賽作品不等於第 1 次或第 2 次等。
例如
假設我們有一桌人
id name 1 Paul 2 James 3 Scott
以及他們去過的地方的表格
id peopleid placename 1 1 Africa 2 1 Australia 3 2 Africa
然後我們可以有一個像這樣的查詢
select n.name, p1.placename, p2.placename from name as n left outer join place as p1 on p1.peopleid = n.id left outer join place as p2 on p2.peopleid = n.id where p2.id != p1.id
對於這些結果:
Paul Africa Australia James Africa NULl Scott NULL NULL