Select

通過外鍵從多個表中選擇屬性

  • May 11, 2021

如果這個問題已經得到回答,我們深表歉意。自己找不到答案。

我正在嘗試制定 SQL 以從另一個表中引用的一個表中提取數據。由於看得太久,我的解釋可能很糟糕,所以請參閱下面的表格:

本質上,我試圖從表 2 中全選,但 table2.att_1 和 table2.att_2 是 table1.id 的外鍵。我想要實現的是提取以下內容:

Table2.ID 的值

Table1.Att_1 其中 Table2.Att_1 = Table1.ID

Table1.Att_1 其中 Table2.Att_2 = Table1.ID

Table2.Att_3 的值

最終的 SQL 將在 PHP 腳本中使用,因此如果無法在單行 SQL 中執行此操作,我可以將請求一一拆分。只是在尋找一些好的舊 CPD。

本質上,我試圖從表 2 中選擇所有內容,…

所以我們從Table2作為查詢的基礎開始:

FROM Table2

…但 table2.att_1 和 table2.att_2 是 table1.id 的外鍵。

我們可能需要兩個(外部)連接到同一個表(Table1),每個外鍵一個:

FROM Table2
   LEFT JOIN Table1 ..
   LEFT JOIN Table1 ..

我想要實現的是提取以下內容: Table2.ID 的值

SELECT Table2.ID

Table1.Att_1 其中 Table2.Att_1 = Table1.ID

Table1.Att_1 其中 Table2.Att_2 = Table1.ID

對,那些驗證我們想要 2 個左連接和ON條件:

SELECT 
   Table1.Att_1
FROM Table2
   LEFT JOIN Table1 ON Table2.Att_1 = Table1.ID 

SELECT 
   Table1.Att_1
FROM Table2
   LEFT JOIN Table1 ON Table2.Att_2 = Table1.ID

糟糕,我們在合併兩個聯接時遇到了問題。我們需要給這些表起別名,因為我們有一個表出現了兩次,但這是一個很好的做法:

FROM Table2 AS t2
   LEFT JOIN Table1 AS t1a ON t2.Att_1 = t1a.ID 
   LEFT JOIN Table1 AS t1b ON t2.Att_2 = t1b.ID

Table2.Att_3 的值

SELECT t2.Att_3

整個查詢變為(在添加了一些列別名之後):

SELECT t2  . ID     AS  ID,
      t1a . Att_1  AS  Att_1_a,
      t1b . Att_1  AS  Att_1_b,
      t2  . Att_3  AS  Att_3
FROM Table2 AS t2
   LEFT JOIN Table1 AS t1a ON t2.Att_1 = t1a.ID 
   LEFT JOIN Table1 AS t1b ON t2.Att_2 = t1b.ID
 ;

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