mysql - 在 SQL 中连接表,其中新列名基于来自另一列的连接表值
问题描述
我有 2 个表,我正在尝试将第二个表的内容加入到第一个表中。本质上,我希望得到一个项目列表,其中包含第一个表中的所有字段,第二个表中的所有相关行,第二个表中列内容之后的名称。
表 A
+----+--------+---------------------+--------+
| ID | Title | Date | Etc... |
+----+--------+---------------------+--------+
| 1 | QWERTY | 0000-00-00:00:00:00 | ... |
| 2 | TEST | 0000-00-00:00:00:00 | ... |
| 3 | ASDF | 0000-00-00:00:00:00 | ... |
| 4 | IOP | 0000-00-00:00:00:00 | ... |
+----+--------+---------------------+--------+
表 B
+----+------------+------+------------+
| ID | Table_A_ID | Key | Value |
+----+------------+------+------------+
| 1 | 1 | Name | John |
| 2 | 2 | Name | Brad |
| 3 | 1 | DOB | 2000-01-16 |
+----+------------+------+------------+
所以我希望能够从表 A 中选择 * 并以某种方式结束以下
+----+--------+---------------------+--------+------+------------+
| ID | Title | Date | Etc... | Name | DOB |
+----+--------+---------------------+--------+------+------------+
| 1 | QWERTY | 0000-00-00:00:00:00 | ... | John | 2000-01-16 |
| 2 | TEST | 0000-00-00:00:00:00 | ... | Brad | |
| 3 | ASDF | 0000-00-00:00:00:00 | ... | | |
| 4 | IOP | 0000-00-00:00:00:00 | ... | | |
+----+--------+---------------------+--------+------+------------+
关键是我不知道钥匙会是什么
不幸的是,我不知道这被称为谷歌它,我一直在查看内部,左,右连接,这些似乎并没有做我想做的事情。
解决方案
这可以通过 TableB 上的两个 JOIN 来实现,例如:
SELECT
ta.id,
ta.date,
ta.etc,
tb.value Name,
td.value DOB
FROM
tableA ta
INNER JOIN tableB tb ON tb.table_a_id = tb.id AND tb.key = 'Name'
INNER JOIN tableB td ON td.table_a_id = ta.id AND td.key = 'DOB'
使用此查询,只会显示在 TableB 中具有名称和 DOB 的记录。如果要避免过滤掉这些“不完整”的记录,可以使用 LEFT JOIN 代替 INNER JOIN。
推荐阅读
- java - 我使用从 maven 生成的 jar 通过 install4j 为我的应用程序创建了一个安装程序。为什么执行.exe时找不到主类?
- java - 使用 AOP 进行注释 - 在方法级别工作,而只有类被注释
- typescript - 在 typescript 中使用 SES 发送电子邮件
- flutter - 我们如何使用 Flutter 中的底部导航栏触发有状态小部件以通过导航重建自身?
- r - 我的 R 脚本在运行时完美运行,但是当我在 R markdown 中使用相同的脚本时,出现错误“当前工作目录中不存在”
- c - 计算错误,用+代替-
- javascript - 我正在创建一个聊天机器人来响应我需要一些特定的回复而不是单个关键字匹配
- php - Laravel 5.6:未捕获的 ReflectionException:类 env 不存在
- django - 如何为访客用户制作将数据保存在数据库中的模型和视图(未在用户 auth.model 中注册)
- java - 如何避免 PostgreSQL 中的死锁