为什么SQL不包含用于指定一个表中引用另一个表中列的列的连接的关键字?
与联接中的NATURAL
类似,指定它位于具有相同名称的列上。
我经常发现自己正在做SELECT ... FROM a JOIN b ON a.b_id=b.id;
之类的事情,其中b_id
中的a
列被定义为引用id
中的b
列。对于一些非常自然的东西来说,这看起来很糟糕?
由于某些我没想到的原因,这样的功能是否会特别难以实现或不受欢迎?
我大多都知道postgresql中的SQL,所以如果大多数其他RDBMS都有这样的功能,那么问题就是postgresql没有这个问题的原因。
答案 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
的安全替代(我认为这是一个等待发生的错误)。