簡體   English   中英

SQL LEFT JOIN 和別名問題

[英]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.

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