Mysql
如何連接同一張表中的三個或更多記錄?
我有一個包含大量數據的表格,我們想要一種基本上標記某些文件以表明它們與(x)其他文件相關的方法:
TABLE A ----------- id name created_at modified_at Records: id name created_at modified_at 1 arlo g 2020-04-29 12:30:00 2020-04-29 12:30:00 2 kenny ws 2020-04-29 12:32:00 2020-04-29 12:32:00 3 roger w 2020-04-29 12:36:00 2020-04-29 12:36:00 4 frank lw 2020-04-29 12:41:00 2020-04-29 12:41:00 5 depeche m 2020-04-29 12:43:00 2020-04-29 12:43:00 6 manson 2020-04-29 12:46:00 2020-04-29 12:46:00
現在 - 假設使用者正在查看文件 ID
1
。他們希望將其與文件3
和4
.如果使用者隨後打開文件
1
,系統可以輕鬆拉取文件3
和4
.
- 同樣,如果使用者打開文件
3
,他們可以輕鬆地提取文件1
和4
.這可能嗎?我不知道如何構造一個查詢子句來提取給定文件的文件 ID,這樣無論查詢哪一個文件,每次的列表都是相同的。
如果使用者隨後打開文件 1,系統可以輕鬆拉取文件 3 和 4。
同樣,如果使用者打開文件 3,他們可以輕鬆拉出文件 1 和 4。
這看起來像關係沒有父子類型。所以解決方案可能是
CREATE TABLE r ( group_id INT UNSIGNED, table_a_id INT UNSIGNED, PRIMARY KEY (table_a_id) /* PRIMARY KEY (group_id, table_a_id) */ );
因此,如果您需要*“如果使用者打開文件 3,他們可以輕鬆提取文件 1 和 4”*,則所有 3 個
table_a
值 (1,3,4) 必須屬於同一組。主鍵選擇取決於確定的文件是否可能僅屬於一個組或多個組。
當您需要通過組中的一個成員獲取整個組成員時,您將使用
SELECT t2.* FROM table_a t1 JOIN r r1 ON t1.id = r1.table_a_id JOIN r r2 ON r1.group_id = r2.group_id JOIN table_a t2 ON r2.table_a_id = t2.id WHERE t1.name = 'initial document name'