S
sasacat
Unregistered / Unconfirmed
GUEST, unregistred user!
我现在遇到一个ORACLE,与MS SQL SERVER左连接的语法不统一的问题。我们知道SQL92标准
的左连接语法是:
'SELECT Table1.Field1, Table2.Field2 FROM Table1 LEFT OUTER JOIN
Table2 ON Table1.Field1 = Table2.Field2'
这也是微软支持的,可是ORACLE不支持,他的语法是 'SELECT Table1.Field1,
Table2.Field2 FROM Table1, Table2 WHERE Table1.Field1 = Table2.Field2(+)'
一开始,我们用了一种变通的办法用MS SQL SERVER的旧的语法 'SELECT Table1.Field1,
Table2.Field2 FROM Table1, Table2 WHERE Table1.Field1 *= Table2.Field2'
因为比较相似替换起来比较容易,可是最近发现这个语法有问题,比如,我要用一个额外
条件限制子表的某些字段时候结果没有用处。
'SELECT Table1.Field1, Table2.Field2 FROM Table1, Table2 WHERE Table1.Field1 *=
Table2.Field2 and Table2.Field2 <> SomeValue'
如果标准的结果是应该过滤Table2.Field2 <> SomeValue' 的记录,可是没有用。而且,
‘*= ’在将来的MS SQL SERVER版本中会不再支持。有没有谁知道一个比较好的办法,就是
一个比较通用的左连接语法适应大多数数据库,或起码ORACLE和SQL SERVER,至少形式上
比较接近,
以便我替换时候容易一些。
的左连接语法是:
'SELECT Table1.Field1, Table2.Field2 FROM Table1 LEFT OUTER JOIN
Table2 ON Table1.Field1 = Table2.Field2'
这也是微软支持的,可是ORACLE不支持,他的语法是 'SELECT Table1.Field1,
Table2.Field2 FROM Table1, Table2 WHERE Table1.Field1 = Table2.Field2(+)'
一开始,我们用了一种变通的办法用MS SQL SERVER的旧的语法 'SELECT Table1.Field1,
Table2.Field2 FROM Table1, Table2 WHERE Table1.Field1 *= Table2.Field2'
因为比较相似替换起来比较容易,可是最近发现这个语法有问题,比如,我要用一个额外
条件限制子表的某些字段时候结果没有用处。
'SELECT Table1.Field1, Table2.Field2 FROM Table1, Table2 WHERE Table1.Field1 *=
Table2.Field2 and Table2.Field2 <> SomeValue'
如果标准的结果是应该过滤Table2.Field2 <> SomeValue' 的记录,可是没有用。而且,
‘*= ’在将来的MS SQL SERVER版本中会不再支持。有没有谁知道一个比较好的办法,就是
一个比较通用的左连接语法适应大多数数据库,或起码ORACLE和SQL SERVER,至少形式上
比较接近,
以便我替换时候容易一些。