我像这样创建表格:
CREATE TABLE account (
id serial PRIMARY KEY,
username varchar (32),
email varchar (255)
)
SELECT
的{{1}}查询看起来像这样(我必须在这里使用句点,因为两列中都存在id列):
JOIN
我见过其他人在列名中创建了包含表名的表(包括下划线):
SELECT account.id, name
FROM account
JOIN activity ON activity.account_id = account.id
查询将如下所示:
CREATE TABLE account (
account_id serial PRIMARY KEY,
username varchar (32),
email varchar (255)
)
使用下划线变体有什么好处吗?有性能差异吗?关于这个问题有没有最佳实践?
答案 0 :(得分:2)
使用完整的标识符名称可以使用using
子句使标识符明确无误
select account_id, name
from
account
inner join
activity using (account_id)
您的第二个查询会出现名称不明确的错误
SELECT account_id, name
FROM account JOIN activity ON activity.account_id = account.account_id
http://www.postgresql.org/docs/current/static/sql-select.html#SQL-FROM
全名的另一个优点是,您希望客户端使用多个表中的ID。如果标识符仅以id
命名,则需要创建别名:
select
account.id as account_id,
activity.id as activity_id,
name
from
account
inner join
activity on activity.account_id = account.id
答案 1 :(得分:1)
不会有任何性能差异。我能想到的唯一实用差异是你不必在每个查询上输入完整的列名 - 只有那些连接到具有不明确列名的表的人才
可能对你有帮助的另一件事是表别名:
SELECT
a.id,
name
FROM account a
JOIN activity b
ON a.id = b.account_id
但除此之外,这纯粹是个人偏好。出于各种原因,我见过团队将两者都用作“标准”。我猜想程序员喜欢较短的名字以减少输入,而管理员在进行故障排除时更喜欢显式名称以获得更多上下文。