加入参考文献

时间:2016-06-04 20:03:47

标签: sql postgresql join

为什么SQL不包含用于指定一个表中引用另一个表中列的列的连接的关键字?

与联接中的NATURAL类似,指定它位于具有相同名称的列上。

我经常发现自己正在做SELECT ... FROM a JOIN b ON a.b_id=b.id;之类的事情,其中​​b_id中的a列被定义为引用id中的b列。对于一些非常自然的东西来说,这看起来很糟糕?

由于某些我没想到的原因,这样的功能是否会特别难以实现或不受欢迎?

我大多都知道postgresql中的SQL,所以如果大多数其他RDBMS都有这样的功能,那么问题就是postgresql没有这个问题的原因。

1 个答案:

答案 0 :(得分:0)

事实上,SQL确实如此。这是USING条款:

select . . .
from a join
     b
     using (id);

正如documentation所解释的那样:

  

USING子句是一种允许您利用的简写   连接双方使用相同名称的具体情况   对于连接列。它需要以逗号分隔的列表   共享列名并形成包含的连接条件   每个人的平等比较。例如,加入T1和T2   USING(a,b)产生连接条件ON T1.a = T2.a AND T1.b =   T2.B。

它仍然要求两个表中的名称相同。但是,因为在连接条件中明确指定了名称,所以这是natural join的安全替代(我认为这是一个等待发生的错误)。