基于另一个表在mysql中设置表的列值。

4

我有两个表:员工药房

员工表中,我有一个名为药房的列,告诉我员工在哪个药房工作,还有一个包含员工姓名的列。

药房表中,我有一个药房列,并且我想添加一个名为Number_of_employees的新列,其中包含相应药房的员工数量。

有什么想法如何做到这一点?


2
不要这样做。相反,编写一个查询/视图来计算使用这两个表的员工数量,那么数字将始终是正确的。如果您存储此计数,则很有可能大部分时间都是错误的。 - RiggsFolly
1
创建一个视图以即时返回您的数据。 - Stu
那个关系并不是非常强,所以你可能想跳过药房表,在员工表上进行整个搜索并编译结果。但如果你必须为了缓存或更强的关系,同时更新两个表怎么办?MySQL还可以承担其他任务,但我会避免这样做,而是手动插入数据。 - BGPHiJACK
1
可以说,更好的设计是拥有员工、药房和连接表 - 这样,如果一个员工在多个药房工作,你就可以轻松处理。 - P.Salmon
COUNT(),MAX(),MIN(),SUM(),AVG(),你可以在SQL中使用它们,你应该阅读有关GROUP BY的内容... https://www.w3schools.com/sql/sql_groupby.asp - Mahmoud Al-samman
1个回答

0

不要添加列Number_of_employees

您可以通过查询返回Number_of_employees的值

Select Pharmacies.*, count(Employees.Pharmacy) as Number_of_employees from Pharmacies
     join Employees on Pharmacies.id = Employees.Pharmacy
group by Employees.Pharmacy

1
我会谨慎使用Pharmacies.*。 - P.Salmon
是的兄弟,谢谢你的补充。 - Mahmoud Al-samman
是的兄弟,我想这是最好的选择。我放弃了那一列。如果您能够友善地回答另一个问题,我会很感激。我有一个名为loyal_customers的表,其中包含客户的姓名、成为忠实客户的日期、电话号码以及他们办理忠诚卡的药房。我希望不可能让客户在同一家药房使用相同的号码签署忠诚卡。如果詹姆斯想要Pharm1的忠诚卡,并使用电话号码phone1,他将无法使用相同的号码再次注册。但是,他可以在其他药房注册。 - Mihai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接