Mysql

如何連接同一張表中的三個或更多記錄?

  • May 1, 2020

我有一個包含大量數據的表格,我們想要一種基本上標記某些文件以表明它們與(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。他們希望將其與文件34.

如果使用者隨後打開文件1,系統可以輕鬆拉取文件34.

  • 同樣,如果使用者打開文件3,他們可以輕鬆地提取文件14.

這可能嗎?我不知道如何構造一個查詢子句來提取給定文件的文件 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'

引用自:https://dba.stackexchange.com/questions/266248