簡體   English   中英

將兩個表連同兩個外鍵連接在一起

[英]Joining two tables together with two foreign keys

我有一個描述表,其中包含某些描述以及唯一的ID。 我有另一個表包含此表的兩個外鍵。 到目前為止,我有以下查詢:

SELECT
Description.description AS Description,
Object.objID AS ID,
Description.description AS Location
FROM
Object
INNER JOIN
Description
ON
Object.objDescID=Description.descID
AND
Object.objLocID=Description.descID;

但是這不起作用,請有人指出我正確的方向嗎?

如果我理解正確,您想要為同一個對象加入兩次Description表。 給它一個鏡頭,看看它是否能讓你得到你想要的東西:

SELECT
  Object.objID AS ID,
  od.description AS Description,
  ld.description AS Location
FROM Object
  INNER JOIN Description AS od
    ON Object.objDescID=od.descID
  INNER JOIN Description AS ld  
    ON Object.objLocID=ld.descID;

編輯:一個建議,如果你允許空外鍵你應該使用LEFT JOIN而不是INNER JOIN,這樣如果其中一個為null,它不會保持整個記錄不顯示。

嘗試運行此功能(可能需要稍作調整):

SELECT
Description.description AS Description,
Object.objID AS ID,
Description.description AS Location
FROM
Object
INNER JOIN
Description AS Object.objDescID=Description.descID
INNER JOIN 
Description AS Object.objLocID=Description.descID;

看起來您需要兩個Description表的引用。 每個引用將使用一個外鍵列連接。

例如:

SELECT o.objID        AS `ID`
     , d.description  AS `Description`
     , l.description  AS `Location`
FROM Object o
JOIN Description d
  ON d.descID = o.objDescID
JOIN Description l
  ON l.descID = o.objLocID 

我們將短別名d分配給我們從中獲取Description值的源。

我們將短別名l分配給我們從中獲取Location值的源。

我們使用短別名而不是表名來引用每個表中的列。

從本質上講,考慮對Description表的引用,就像它是兩個不同的表,即使它實際上是同一個表。

請注意,我們必須為至少一個對Description的引用分配一個別名,以便我們可以區分它們。 (否則,如果我們只是說Description.description ,MySQL將不知道我們正在談論哪一個。)

請注意,如果外鍵列objDescIDobjLocID具有NULL值,或者引用的表中不存在匹配值,則查詢將不會從Object返回該行。

為了確保即使找不到匹配值也從Object獲取一行,您可以通過包含LEFT關鍵字來使用OUTER連接操作。

例如:

SELECT o.objID        AS `ID`
     , d.description  AS `Description`
     , l.description  AS `Location`
FROM Object o
LEFT
JOIN Description d
  ON d.descID = o.objDescID
LEFT
JOIN Description l
  ON l.descID = o.objLocID 

請注意,實際上只需要一個別名,但我傾向於為查詢中的所有行源分配短別名。 這使得語句更難以辨認,如果我以后需要添加對已經使用的表的另一個引用,或者我需要用不同的表名或內聯視圖(或子查詢)替換其中一個表名,這確實很有幫助。 ,我可以保留別名相同,只更改rowsource。 其他別名在語句的實際執行中沒有任何區別,它們就在那里,因為我遵循相同的模式來處理我為更復雜的查詢所遵循的簡單查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM