当前位置: 首页 > 知识库问答 >
问题:

用表中的值替换表中的外键ID

何向荣
2023-03-14

我有一个从应用程序中提取的数据库(我没有创建它)。我需要提取数据以用于不同的应用程序。主表包含3个外键,每个外键链接到其他表。我想用其他表中的特定列值替换FK ID。主表如下所示:

数据:

+------------+------------+--------+----------+-----------+----------+------+
| startdate  | enddate    | status | employee | cause     | duration | type |
+------------+------------+--------+----------+-----------+----------+------+
| 2018-01-05 | 2018-01-07 | 2      | 1        | some text | 3        | 1    |
+------------+------------+--------+----------+-----------+----------+------+
| 2018-02-03 | 2018-02-04 | 1      | 2        | some text | 2        | 2    |
+------------+------------+--------+----------+-----------+----------+------+

状态、雇员和类型都是外键。它们链接到具有以下布局的表:

用户:

+----+-----------+----------+
| id | firstname | lastname |
+----+-----------+----------+
| 1  | John      | Doe      |
+----+-----------+----------+
| 2  | Dylan     | Smith    |
+----+-----------+----------+

类型:

+----+-----------+
| id | name      |
+----+-----------+
| 1  | Annual    |
+----+-----------+
| 2  | Quarterly |
+----+-----------+

地位:

+----+----------+
| id | name     |
+----+----------+
| 1  | Accepted |
+----+----------+
| 2  | Rejected |
+----+----------+

我希望主桌看起来像这样

+------------+------------+-----------+--------------+-----------+----------+-----------+
| startdate  | enddate    | status    | employee     | cause     | duration | type      |
+------------+------------+-----------+--------------+-----------+----------+-----------+
| 2018-01-05 | 2018-01-07 | Rejected  | John Doe     | some text | 3        | Annual    |
+------------+------------+-----------+--------------+-----------+----------+-----------+
| 2018-02-03 | 2018-02-04 | Accepted  | Dylan Smith  | some text | 2        | Quarterly |
+------------+------------+-----------+--------------+-----------+----------+-----------+

我已经尝试了我在谷歌上找到的各种东西,但是我不能让它以我想要的方式出现。我来自PHP背景,但我在SQL方面有一些经验,但我不是专家。我尝试过获取对应于ID的值并将其保存在不同的表中,但我不知道如何使用这些返回的值更新表:

INSERT into stat
SELECT b.name stat
FROM data a JOIN status b
ON a.status = b.id

这将在名为"stat"的表中以正确的顺序创建具有正确值的列,如下所示:

+----------+
| status   |
+----------+
| Rejected |
+----------+
| Accepted |
+----------+

这同样适用于“用户”(我还将名字和姓氏连接到“用户”表中名为“name”的列中。我想使用连接的值)和“类型”表。如何使用上表中的相应值更新“数据”表中的各个FK值?

共有1个答案

全冥夜
2023-03-14

数据表连接到其他三个表应该在这里起作用:

SELECT
    d.startdate,
    d.enddate,
    s.name AS status,
    CONCAT(u.firstname, ' ', u.lastname) AS employee,
    d.cause,
    d.duration,
    t.name AS type
FROM data d
LEFT JOIN status s
    ON d.status = s.id
LEFT JOIN users u
    ON d.employee = u.id
LEFT JOIN types t
    ON d.type = t.id;

如果缺少来自其中一个联接的给定值,并且希望显示占位符值(而不是默认的NULL),则可以使用COALESCE函数。

 类似资料:
  • 问题内容: 我有一个列表,我想用condition()返回True的None替换值。 例如,如果条件检查bool(item%2)应该返回: 最有效的方法是什么? 问题答案: 使用列表理解来构建新列表: 您可以根据需要修改原始列表,但实际上并不能节省时间: 以下是(Python 3.6.3)演示非节省时间的时间: 和Python 2.7.6计时:

  • 无法在表列中发送值。当我试图使用Selenium在列中插入值时,我得到了不同的错误。 > 然后单击并编辑该值。 传递的值未插入表列中。但是我可以单击Tables列。我的考试通过了。 然后尝试设置值。它显示超时的错误。 我再次使用div/span组合作为XPath,并编辑了该值。但这并没有反映在表中。 在这里我没有得到任何错误。但保存后未反映该值。 我给元素添加了各种格式。 div/[id] HTM

  • 我使用的框架Laravel。 我有两个表(用户和人员)。我想将persons表的主键person\u id存储在users表的外键person\u id中。目前我使用这个$user- 表用户 餐桌上的人 索引操作 商店行动 用户迁移 人员迁移 模型用户 模范人物 我只想改变这个:$user-

  • 我刚开始冬眠并尝试使用标准。我一直在从2个表(即主外键在realtion中的表)中获取结果。 我有Carpooler和SourceToDestination细节DTO,现在基于用户搜索数据,我想填充Carpooler Object,其中包含SourceToDestination细节,但我没有得到它,不知道如何使用标准API。 通过以上标准API,我只得到了SourceToDestination细节

  • 问题内容: 我得到了这个清单: 我想用一些与之相似的奇异值代替,从而得到一个新的清单: 问题答案: 这些称为列表推导。

  • 我对Laravel和数据库都是新手。我正在写一个学生评估的网络应用程序。我有一个现有的MySQL数据库,它已经包含了我所需要的一切;但是,我正在使用Laravel的auth user表,并尝试添加一个外键,该外键引用MySQL数据库中的教师表。我一直得到以下错误。。。 在Connection.php第664行: SQLSTATE[HY000]:一般错误:1215不能添加外键约束(SQL:改变表添加