【问题标题】:PRE ANSI-92 Left Join Syntax (Sybase)PRE ANSI-92 左连接语法 (Sybase)
【发布时间】:2009-03-02 21:20:56
【问题描述】:

当 Where 子句的一部分具有“等于某个常数”条件时,使用 ANSI-92 之前的语法(即 *=)指定左连接的语法是什么? (在这种情况下,100 是常数)

例子:

SELECT t1.ID, t.* FROM (select * from SybaseTable where ID=1) t, SqlServerTable t1 WHERE t1.ID *= 100 and t1.SeqNo *= t.SeqNo

在这种情况下,我想要派生表“t”中的所有记录,即使“t1”没有匹配项。当't'中不存在 SeqNo 上的匹配行时,我希望 t1.ID 在 Select 子句中返回 NULL。

我收到的错误是“外连接的两个术语都必须包含列”。

我现在在 SQL Server 2005 中执行此查询,但它最终将用于 Sybase 实现,这需要旧的连接语法。

提前致谢

【问题讨论】:

    标签: sql-server sybase left-join


    【解决方案1】:

    我认为这样做可以,但您必须进行测试才能确定:

    SELECT t1.ID, t.* 
    FROM (select * from SybaseTable where ID=1) t, SqlServerTable t1
    WHERE t.SeqNo *= t1.SeqNo AND 100 *= t1.ID
    

    请注意,我颠倒了 SeqNo 部分的顺序,以便更好地指示哪个是连接的左侧。

    【讨论】:

    • 我试过了,它没有返回任何记录,当 *= 从“= 100”部分中删除时,它的行为不像左连接
    • 嗯...试试*=左侧的100
    • 或者可能是一个 case 条件:当 t1.ID = 100 then t1.ID ELSE null
    • cool.... SeqNo 部分的反转是我的错误。这一直是问题的根源。
    猜你喜欢
    • 2010-09-23
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2011-06-02
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多