我有一张看起来像这样的表:
表 1 ->
+----+--------+--------+
| id | name | author |
+----+--------+--------+
| 1 | First | Me |
| 2 | Second | You |
+----+--------+--------+
表2 ->
+-----+------------+-----------+------------+
| mid | table1_id | key | value |
+-----+------------+-----------+------------+
| 1 | 1 | desc | hello |
| 2 | 1 | begin_day | monday |
| 3 | 1 | end_day | tuesday |
| 4 | 2 | desc | goodbye |
| 5 | 2 | begin_day | wednesday |
| 6 | 2 | end_day | friday |
+-----+------------+-----------+------------+
这里的关系是表1中的id
对应表2中的table1_id
我想要得到的输出是...
+----+---------+---------+-------------+-----------+-----------+
| id | name | author | desc | begin_day | end_day |
+----+---------+---------+-------------+-----------+-----------+
| 1 | First | Me | hello | monday | tuesday |
| 1 | Second | You | goodbye | wednesday | friday |
+----+---------+---------+-------------+-----------+-----------+
我已经尝试了几种不同的连接语句——都是下面的变体。但是,我不太精通 MySQL 查询。
SELECT * FROM table_1 LEFT JOIN table_2 on table_1.id = table_2.table1_id
产生...
+----+----------+----------+----------+------------+-----------+
| id | mid | name | author | key | value |
+----+----------+----------+----------+------------+-----------+
| 1 | 1 | First | Me | desc | hello |
| 1 | 2 | First | Me | begin_day | monday |
| 1 | 3 | First | Me | end_day | tuesday |
| 2 | 4 | Second | You | desc | goodbye |
| 2 | 5 | Second | You | begin_day | wednesday|
| 2 | 6 | Second | You | end_day | friday |
显然,遍历此连接语句会产生 6 个结果,表 2 中与表 1 中的 id 匹配的每一行都会产生 1 个结果。如何使用正确的查询语句避免这种情况?
提前谢谢你。
最佳答案
如果您知道将获得的所有列,则可以使用 case 语句,如下所示:
Select distinct table_1.*,
case when table_2.key='desc' then value end as desc,
case when table_2.key='begin_day' then value end as begin_day,
case when table_2.key='end_day' then value end as end_day
FROM table_1 LEFT JOIN table_2 on table_1.id = table_2.table1_id
希望这对您有所帮助!
关于mysql - 如何正确格式化此 MySQL JOIN 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11232021/