mysql - SQL - 如何插入同一列具有多个值的记录?

标签 mysql sql database

我正在创建一个基于口袋妖怪的数据库,但目前我很难插入具有不同 Action 的口袋妖怪。

每个神奇宝贝都有一套 Action ,所以不仅仅是一个 Action ,而是很多 Action 。然而,当我尝试将具有可变长度移动量的 Pokemon 插入表中时,MySQL 会忽略之前的移动,只插入最后一个移动。

简而言之:如何插入同一 Pokemon 但 Action 不同的多个记录?

[我想一个很好的类似的现实例子是一个拥有多个电子邮件地址的人。我该如何将其插入到表中?]

最佳答案

问题在于,您将其实现为一对一关系,但您拥有的是多对多关系(每个神奇宝贝有许多 Action ,每个 Action 都可以被许多神奇宝贝学习)。

您可能想要做的是有 2 个表。

Table 1: Pokemon
ID, Name, Move1ID, Move2ID, Move3ID, Move4ID, Types etc.

Table 2: Moves
ID, Name, PP, Power, type etc.

然后您可以使用另一个表,其中包含这两个表之间的所有联接信息。您将有多行包含相同的 Pokemon ID 和多行包含相同的 Move ID,但 [Pokemon ID、Move ID] 组合将是唯一的。

Table 3: PokemonMoves
PkID, MoveID

然后您可以通过此关系表从 Pokemon 表到 Moves 表进行连接

SELECT * 
FROM Pokemon AS p
LEFT JOIN PokemonMoves AS pm on p.ID = pm.PkID
LEFT JOIN Moves AS m ON m.ID = pm.MoveID

SO 上有很多关于多对多关系的帖子,这看起来是一个很好的起点:Many to many relationship?

关于mysql - SQL - 如何插入同一列具有多个值的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096945/

相关文章:

java - Java 应用程序中 SQLBase 的使用

mysql - 更改 View 中列的类型?

sql - 在 RDB 模式中,什么时候将列组合成单个分隔列会更好?

c# - 丢失 Oracle 数据库连接后恢复 NHibernate

php - MySQL查询数据库以显示检查列表的最佳方式

mysql - 将信息拉取到未绑定(bind)字段

java - 使用 php 和 MySql 在 android 中检查复选框

php - 我无法在 Mysql 中的另一个查询中运行查询。表消息。显示收件箱

mysql - 当其他表格中有 PDF 时,如何选择不显示?

database - Spring JDBC BeanPropertyRowMapper 是 否 ('Y' ,'N' ) 到 boolean bean 属性