2011-04-25 104 views
2

我在SQL 2000數據庫中有一個查詢,我需要將它遷移到SQL 2008數據庫。它在SQL2000中工作正常,我不需要將它修改爲SQL2008。以下是SQL2000中的查詢。請指導我如何在ON子句中重載*==*子句。SQL 2000到SQL 2008

SELECT tblacc. * 
FROM tblacc, 
     tblst, 
     tblreceipt, 
     tblrtemp, 
     tblitem 
WHERE tblacc.rkey = tblreceipt.rkey 
     AND tblacc.stkey = tblst.stkey 
     AND tblacc.stkey *= tblrtemp.stkey 
     AND tblacc.stkey *= tblitem.stkey 
     AND tblacc.itkey *= tblitem.itkey 
     AND tblrtemp.rkey =* tblreceipt.rkey 

回答

1
SELECT tblacc.* 
FROM tblacc 
    INNER JOIN tblreceipt ON tblacc.rkey = tblreceipt.rkey 
    INNER JOIN tblst  ON tblacc.stkey = tblst.stkey 
    LEFT JOIN tblitem ON tblacc.stkey = tblitem.stkey 
         AND tblacc.itkey = tblitem.itkey 
    LEFT JOIN tblrtemp ON tblacc.stkey = tblrtemp.stkey 
         AND tblrtemp.rkey = tblreceipt.rkey 
1

這不是你的意思相當清楚的「超載*=,在ON子句=*條款」,很遺憾。但是,我可以看到一個問題:對外連接使用舊式語法。您應該用the new "ANSI SQL" syntax替換此語法。它使用的關鍵字,而不是*==*,和移動連接條件爲FROM條款:

  • WHERE a.x *= b.y成爲FROM a LEFT OUTER JOIN b ON a.x = b.y
  • WHERE a.x =* b.y成爲FROM a RIGHT OUTER JOIN b ON a.x = b.y
  • 還有FROM a FULL OUTER JOIN b ON a.x = b.y,從墊未匹配的元組有NULL的表。

舊的語法has been deprecated since SQL Server 2005,因爲它是非標準的,容易引入歧義。它是not available on databases running in SQL Server 2005 or later兼容性模式,這可能是您的問題的根源。

2

* =爲左加入

= *是一個正確的加入

你試過把它在SQL編輯器中的SQL Server Management Studio中? 它可能會將它轉換爲你。

+0

好建議,我只是試圖從'V1 master..spt_values選擇*,master..spt_values V2 WHERE v1.number * = v2.number'點擊 「查詢設計在編輯器」,它確實重寫它。顯然有些情況下[舊式語法不明確](http://www.sqlservercentral.com/blogs/brian_kelley/archive/2007/11/01/3087.aspx),所以不知道它如何處理這些。 – 2011-04-25 21:32:37

+0

雖然它似乎不喜歡OP的查詢。 – 2011-04-25 21:38:46

0

我相信,查詢應該是這樣的下面,雖然我不知道,如果你想要做一個INNER JOIN並與表tblreceipt一個RIGHT JOIN

SELECT tblacc.* 
FROM tblacc 
JOIN tblreceipt 
    ON tblacc.rkey = tblreceipt.rkey 
JOIN tblst 
    ON tblacc.stkey = tblst.stkey 
LEFT JOIN tblrtemp 
    ON tblacc.stkey = tblrtemp.stkey 
LEFT JOIN tblitem 
    ON tblacc.stkey = tblitem.stkey AND tblacc.itkey = tblitem.itkey 
RIGHT JOIN tblreceipt 
    ON tblrtemp.rkey = tblreceipt.rkey 
相關問題