是否可以将关系强制为一对一而不是一对多?如果不是,那又怎样?
Is it possible to force a relationship to be one-to-one instead of one-to-many? if not, then what?
我有一个数据库任务很快就要到期了,我在错误的事情上浪费了很多时间。
为简单起见,我有一个名为 Character 的 table,它从许多 table 中提取信息,其中之一是 Inventory。 Character 和 Inventory 都有一个名为 inventory_ID 的字段,它是 Inventory 中的 PK Table.
SELECT gold, char_name
FROM Inventory, Character
我试图编写一个查询来从每个角色中获取金币,所以而不是,例如:
character 1 : 200 gold
character 2 : 500 gold
显示:
character 1 : 200 gold
character 1 : 500 gold
character 2 : 200 gold
character 2 : 500 gold
建立关系时,我注意到我无法手动更改类型。大多数时候,这很好,但对于这一次,我认为问题在于 Inventory 与 Character 具有一对多关系,因此每个角色都有每个 Inventory(?).
我已经为此苦苦思索了一段时间,时间已经 运行 结束了,我不想寻求帮助,但我看不到其他选择。
您的代码生成两个表的笛卡尔积。相反,您需要 join
,使用公共列 inventory_id
来关联两个表的行:
select i.gold, c.char_name
from inventory as i
inner join character as c on c.inventory_id = i.inventory_id
如果 character
在 inventory
中可能有多个匹配项,则可能需要聚合:
select sum(i.gold) as gold, c.char_name
from inventory as i
inner join character as c on c.inventory_id = i.inventory_id
group by c.char_name
但这不是您的问题所暗示的。第一个查询应该做你想做的。
为了补充@GMB 的回答,您可以将 Characters
table 中 Inventory_Id
字段的 Indexed
设置为 Yes(No Duplicates)
。这将防止在 MS Access 中的 table 级别上添加重复的 Inventory_Id。这将为您提供 1-1 关系。
我有一个数据库任务很快就要到期了,我在错误的事情上浪费了很多时间。
为简单起见,我有一个名为 Character 的 table,它从许多 table 中提取信息,其中之一是 Inventory。 Character 和 Inventory 都有一个名为 inventory_ID 的字段,它是 Inventory 中的 PK Table.
SELECT gold, char_name
FROM Inventory, Character
我试图编写一个查询来从每个角色中获取金币,所以而不是,例如:
character 1 : 200 gold
character 2 : 500 gold
显示:
character 1 : 200 gold
character 1 : 500 gold
character 2 : 200 gold
character 2 : 500 gold
建立关系时,我注意到我无法手动更改类型。大多数时候,这很好,但对于这一次,我认为问题在于 Inventory 与 Character 具有一对多关系,因此每个角色都有每个 Inventory(?).
我已经为此苦苦思索了一段时间,时间已经 运行 结束了,我不想寻求帮助,但我看不到其他选择。
您的代码生成两个表的笛卡尔积。相反,您需要 join
,使用公共列 inventory_id
来关联两个表的行:
select i.gold, c.char_name
from inventory as i
inner join character as c on c.inventory_id = i.inventory_id
如果 character
在 inventory
中可能有多个匹配项,则可能需要聚合:
select sum(i.gold) as gold, c.char_name
from inventory as i
inner join character as c on c.inventory_id = i.inventory_id
group by c.char_name
但这不是您的问题所暗示的。第一个查询应该做你想做的。
为了补充@GMB 的回答,您可以将 Characters
table 中 Inventory_Id
字段的 Indexed
设置为 Yes(No Duplicates)
。这将防止在 MS Access 中的 table 级别上添加重复的 Inventory_Id。这将为您提供 1-1 关系。