看起來你需要引用到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
值。
我們使用短別名而不是表名引用每個表中的列。
從本質上講,儘管它是真正的同一個表,但是它的表格的引用實際上是兩個不同的表格。
請注意,我們必須爲描述的至少一個引用指定一個別名,以便我們可以區分它們。 (否則,MySQL不會知道我們在談論如果我們剛纔說Description.description
其中之一。)
注意,如果外鍵列objDescID
或objLocID
有一個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
注意,但我傾向於分配短的別名在查詢所有的行來源。這使得語句更易於辨認,而且如果我以後需要爲已經使用的表添加另一個引用,或者需要用不同的表名或內聯視圖(或子查詢)替換其中一個表名, ,我可以使別名保持不變,並更改行源。其他別名在語句的實際執行中沒有任何區別,它們就在那裏,因爲我遵循相同的模式來進行簡單的查詢,以適應更復雜的查詢。
不工作?有些錯誤? –
你最後的'AND'條款需要修復 – SoulTrain
Joe Meyer指出你正確的方向。他的回答基本上與我的一樣。您需要**兩個單獨的引用來描述表。一個引用查詢objDesc,另一個查找objLoc。在描述表的引用之一需要別名的情況下,可以區分它們。 – spencer7593