我有一个访问数据库,我想根据他们所在的医院在每行末尾的列中添加一个值。这是一个单独的值。例如 - 名为“St. James Hospital”的医院在单独的字段中具有“3”的 ID。我如何使用查询而不是手动浏览整个数据库来做到这一点? 这里的例子
4 回答
你可以这样做:
update yourTable
set yourFinalColumnWhateverItsNameIs = {your desired value}
where someColumn = 3
表格中在 someColumn 列中有 3 的每一行都会将最后一列设置为您想要的值。
如果这不是您想要的,请让您的问题更清楚。你想把医院的名字放到这张表里吗?如果是这样,那不是一个好主意,有更好的方法来实现这一点。
此外,如果具有特定值 (3) 的每一行都获得该值,您可以简单地将其添加到另一个(即医院)表中。无需在指向 Hospitals 表的表中各处重复。
PS这是我的意思的一个例子:
假设你有两张桌子
HOSPITALS
id
name
city
state
BIRTHS
id
hospitalid
babysname
gender
mothersname
fathername
您可以获取婴儿的出生城市,而无需在 Births 表中包含 City 列,只需加入 hospital.id =births.hospitalid 上的表即可。
不是最好的解决方案,但你可以这样做:
create table new_table as
select id, case when hospital="St. James Hospital" then 3 else null
from old_table
或者,更好的选择是创建一个包含hospital_name 和hospital_id 列的表。然后,您可以创建一个外键关系,该关系将为您创建映射,并强制执行数据完整性。跨两个表的连接将产生您想要的结果。
在这里阅读:
http://net.tutsplus.com/tutorials/databases/sql-for-beginners-part-3-database-relationships/
您的问题的答案是 JOIN+UPDATE。我相当确定如果您查找,您会找到以下链接。
在检查您的 ACCDB 文件后,我建议您考虑以不同的方式设置表。
表Health_Professionals:
ID First Name Second Name Position hospital_id
1 John Doe PI 2
2 Joe Smith Co-PI 1
3 Sarah Johnson Nurse 3
餐桌医院:
hospital_id Hospital
1 Beaumont
2 St James
3 Letterkenny Hosptial
一个关键点是避免在Health_Professionals表中存储医院 ID 和名称。仅存储 ID。当您需要查看名称时,使用医院 ID 加入Hospitals表并从那里获取名称。
这种设计的一个有用的副作用是,如果有人拼错了医院名称,例如“医院”,您只需在一个地方更正该错误。每当有意重命名医院时,情况也是如此。
基于这些表,下面的查询返回这个结果集。
ID Second Name First Name Position hospital_id Hospital
1 Doe John PI 2 St James
3 Johnson Sarah Nurse 3 Letterkenny Hosptial
2 Smith Joe Co-PI 1 Beaumont
SELECT
hp.ID,
hp.[Second Name],
hp.[First Name],
hp.Position,
hp.hospital_id,
h.Hospital
FROM
Health_Professionals AS hp
INNER JOIN Hospitals AS h
ON hp.hospital_id = h.hospital_id
ORDER BY
hp.[Second Name],
hp.[First Name];