代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

为什么SQL语句“select*from gifts inner join sentments using(giftid);”中的()是强制的?

  •  1
  • nonopolarity  · 技术社区  · 14 年前

    为什么在SQL语句中()是必需的

    select * from gifts INNER JOIN sentgifts using (giftID); 
    

    ?()通常用于指定某物的分组。但在这种情况下,我们是否应该能够使用2个或更多的字段名…?在上面的示例中,可以很清楚地看到它是1个字段,是否只是让解析器在完全清除时不绕过()?(例如在Ruby语言中)。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Mike Keller    14 年前

    是的,您可以在using子句内指定多个列,如下所示。

    using(col_1,col_2,col_3)
    
        2
  •  1
  •   ntziolis    14 年前

    实际上,您可以指定 列的列表 ,检查 here

    而且它是强制的,因为语法异常会破坏解析器,并且会影响性能。

    有人会说 使用 它本身已经只是 语法甜头 ,这只是一个快捷方式,可以指定一个普通的连接 如果所联接的表的列名称相同,则使用语法。

    因为你可以加入 多列 使用 只是在做同样的事情。

    以下内容 陈述是 因此 相等的 :

    SELECT A.c1, A.c2, A.c3 FROM TABLE_A A
    JOIN TABLE_B B 
    ON A.c1 = B.c1 
    ON A.c2 = B.c2 
    ON A.c3 = B.c3
    

    SELECT A.c1, A.c2, A.c3 FROM TABLE_A A
    JOIN TABLE_B B 
    USING (c1,c2,c3)