首頁 >資料庫 >mysql教程 >如何在沒有直接外鍵關係的情況下連接表格?

如何在沒有直接外鍵關係的情況下連接表格?

DDD
DDD原創
2025-01-15 18:11:51669瀏覽

How Can I Join Tables Without a Direct Foreign Key Relationship?

透過第三張表連接具有外鍵關係的表

問題描述

資料通常儲存在多個表中,關係由外鍵定義。但是,有時兩個表可能沒有直接的外鍵關係,但它們仍然可以透過第三張表連接。本問題示範如何執行此類連接以從多個表中提取特定資訊。

解決方法

與需要外鍵進行表連接的假設相反,外鍵並非必需。相反,可以根據每個表定義的謂詞連接表。

要連接缺少直接外鍵關係的表,請遵循以下步驟:

  1. 根據所需輸出決定要連接的適當表。
  2. 使用 CROSS JOININNER JOIN 運算子組合表。
  3. 使用 WHERE 子句新增其他條件以篩選已連接的資料。

詳細解釋

語句和表:

每個表都有一個謂詞來定義它所包含的行。例如,Species 表包含這樣的行:物種名稱對應其木材類型和最大高度。

查詢謂詞:

查詢也依據 FROMWHERE 和其他子句具有謂詞。表別名允許重命名列並促進連接條件。

連接表:

CROSS JOININNER JOIN 使用 AND 組合謂詞。 UNION 使用 OR,而 EXCEPT 使用 AND NOT 組合謂詞。 ONWHERE 子句可用來指定其他連接條件。

選擇表:

要選擇正確的表,請考慮所需的輸出並確定包含必要列的表。根據它們共享的謂詞連接它們。

外鍵與查詢:

外鍵不影響查詢執行。它們強制執行完整性約束,但不限制連接。查詢根據表謂詞進行評估。

範例查詢:

要提取「ARCTIC」區域森林的森林名稱、物種名稱和木材類型:

<code class="language-sql">SELECT Forest.Fo_name, Species.Sp_name, Species.Sp_woodtype
FROM Forest
INNER JOIN Tree ON Forest.Fo_name = Tree.Tr_forest
INNER JOIN Species ON Tree.Tr_species = Species.Sp_name
WHERE Forest.Fo_loc='ARCTIC'
ORDER BY Forest.Fo_name, Species.Sp_name;</code>

此查詢透過 Tr_speciesTr_forest 欄位有效地連接了 ForestSpeciesTree 表,並根據 Fo_loc 欄位篩選結果。輸出按森林和物種名稱排序。

注意:範例查詢已根據描述進行了修正,以確保邏輯正確性並能夠連接三個表。 原始範例中 ON Tree.Tr_species=Tree.Tr_forest 條件是錯誤的,因為它試圖在一個表格內連接兩個不同的欄位。 修正後的查詢使用了正確的連接條件。

以上是如何在沒有直接外鍵關係的情況下連接表格?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn