我有一个表'users'的列:
user_id(PK), user_firstname, user_lastname
和另一个包含列的“房间”:
event_id(PK), user_id(FK), user_firstname, user_lastname....(and more columns).
我想知道是否可以自动填充user_firstname
和user_lastname
只知道user_id
列。
与默认值user_firstname
类似:“select users.user_firstname where users.user_id = user_id”
我不知道是否足够清楚......正如你所看到的,我在数据库中的知识非常狭窄。
答案 0 :(得分:4)
user_firstname和user_lastname列不属于您的房间表。 user_id列引用users表,这就是您所需要的。 要选择数据,可以使用JOIN语句,如
SELECT R.event_id, R.user_id, U.user_firstname, U.user_lastname
FROM room AS R
JOIN users AS U ON R.user_uid = U.user_id
答案 1 :(得分:4)
您想要实现的目标可以通过JOIN
来完成。他们将避免使用冗余的user_firstname
和user_lastname
列。因此,您只需在查询房间表时从两个表中获取,并在结果集中获得额外的users
列:
SELECT * FROM room AS r INNER JOIN users AS u ON r.user_id = u.user_id;
我们在这里做的事情叫做规范化。在您的案例room.user_id references user.user_id
中,要处理的另一件重要事情是外键约束及其级联。 delete
上的user
最有可能级联到room
,如果您要删除用户,而不是将其标记为已删除。
答案 2 :(得分:2)
这里的答案是侧面的问题。您不想要事件表中的user_firstname
和user_lastname
列。 user_id
是整个User表的该行的代理。当您需要访问user_firstname
时,您可以在公共列上对这两个表执行 JOIN 。