2011-04-25 83 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 
相关问题