[英]SQL LEFT JOIN and alias questions
這是我的查詢的一部分。
, dbo.tew_translatedtext.tra_0 as FromParentTagDescription
, dbo.tew_translatedtext.tra_0 as ToParentTagDescription
, rrr.tra_0 as ToParentTagDescription
FROM vew_cable_ex -- as test alias
LEFT JOIN vew_wire_ex ON ((vew_wire_ex.cab_id = vew_cable_ex.cab_id) AND vew_wire_ex.caw_no = vew_cable_ex.caw_no)
-- get the parent tag description
left join dbo.tew_translatedtext on ( vew_wire_ex.vwircomcomfrom_com_id = dbo.tew_translatedtext.tra_objectid )
left join dbo.tew_translatedtext as rrr on ( vew_wire_ex.vwircomcomto_com_id = dbo.tew_translatedtext.tra_objectid )
我在這里有幾個問題。 - 'as rrr' 使用得當嗎? - 腳本可以運行。 但似乎 'rrr.tra_0 as ToParentTagDescription' 沒有給出預期的結果。 都是空的。 我懷疑某處的 SQL 語法不正確。
任何評論表示贊賞。
最好的羅蘭
最佳做法是為所有表分配有意義的別名,然后在每次識別查詢中的列時引用這些別名。 這將有助於在您編寫時以及當您或其他人必須回來進行故障排除時清楚地說明每列來自哪個表。 它還使代碼更易於閱讀。
為表設置別名后,許多 SQL 方言要求您在JOIN...ON
條件中使用別名。
我應該注意,在您的代碼片段中,您定義了兩次ToParentTagDescription
列,所以我在下面重復了這一點。 不過,您確定您正在尋找適合您預期結果的產品嗎? 您還從第一次連接到tew_translatedtext
兩次調用列tra_0
並為其分配不同的列別名。
作為可讀性的問題,我發現連接中的括號是視覺上的混亂,除非它們是某種實際分組所必需的,所以我刪除了它們。
...
fid.tra_0 AS FromParentTagDescription
,fid.tra_0 AS ToParentTagDescription
,tid.tra_0 AS ToParentTagDescription
FROM
<AddSchemaHere>.vew_cable_ex AS cx
LEFT JOIN
<AddSchemaHere>.vew_wire_ex AS wx
ON
wx.cab_id = cx.cab_id
AND
wx.caw_no = cx.caw_no
-- get the parent tag description
LEFT JOIN
dbo.tew_translatedtext AS fid --From ID...
ON wx.vwircomcomfrom_com_id = fid.tra_objectid
LEFT JOIN
dbo.tew_translatedtext AS tid --To ID
ON wx.vwircomcomto_com_id = tid.tra_objectid;
問題是您將dbo.tew_translatedtext
加入到您的查詢中兩次,但是您沒有為每個人分配別名,並且您沒有使用始終如一的別名。 這意味着您正在使用的數據庫引擎(我懷疑它是 SQL 服務器,但如果您正確標記數據庫引擎會有所幫助)正在猜測您的意思是連接哪個表 - 它可能弄錯了。 我懷疑你的意思是:
.
.
.
, fp.tra_0 as FromParentTagDescription
, tp.tra_0 as ToParentTagDescription
FROM vew_cable_ex as cx
LEFT JOIN vew_wire_ex as vx
ON (vx.cab_id = cx.cab_id AND
vx.caw_no = cx.caw_no)
left join dbo.tew_translatedtext as fp -- get the parent tag description
on (vx.vwircomcomfrom_com_id = fp.tra_objectid )
left join dbo.tew_translatedtext as tp
on (vx.vwircomcomto_com_id = tp.tra_objectid )
在這里,我使用fp
作為“from parent”的別名,並使用tp
作為“to parent”的別名。 這似乎與之前分配的列別名一致。
最后一個問題已修復。
如屏幕截圖所示,我正在嘗試加入另一個視圖。 在 cex.fun_bun_id = vew_bundle.bun_defaultfuid 上左加入 vew_cable_ex 作為 cex
它拋出一個錯誤,說不能綁定。 它似乎與 vew_cable_ex 表有關。 你能指出這個問題嗎?
問候,羅蘭
我的回答的一些注釋:在您別名為 rrr 的表的 ON 子句中,您錯誤地為它看起來像的列別名。
, dbo.tew_translatedtext.tra_0 as FromParentTagDescription
, dbo.tew_translatedtext.tra_0 as ToParentTagDescription
, rrr.tra_0 as ToParentTagDescription
FROM vew_cable_ex -- as test alias
LEFT JOIN vew_wire_ex ON ((vew_wire_ex.cab_id = vew_cable_ex.cab_id) AND
vew_wire_ex.caw_no = vew_cable_ex.caw_no)
-- get the parent tag description
left join dbo.tew_translatedtext on ( vew_wire_ex.vwircomcomfrom_com_id = dbo.tew_translatedtext.tra_objectid )
left join dbo.tew_translatedtext as rrr on ( vew_wire_ex.vwircomcomto_com_id = rrr.tra_objectid )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.