如何正确格式化此MySQL JOIN语句?

如何正确格式化此MySQL JOIN语句?,mysql,Mysql,我有一张桌子,看起来像: 表1-> +----+--------+--------+ | id | name | author | +----+--------+--------+ | 1 | First | Me | | 2 | Second | You | +----+--------+--------+ 表2-> +-----+------------+-----------+------------+ | mid | table1_id | key

我有一张桌子,看起来像:

表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\u id

我想要得到的结果是

+----+---------+---------+-------------+-----------+-----------+
| id |  name   |  author |     desc    | begin_day |  end_day  |
+----+---------+---------+-------------+-----------+-----------+
|  1 |  First  |   Me    |    hello    |   monday  |  tuesday  |
|  1 |  Second |   You   |   goodbye   | wednesday |  friday   |
+----+---------+---------+-------------+-----------+-----------+
我尝试了几种不同的join语句——都是下面的变体。然而,我对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   | 
显然,迭代这个join语句会产生6个结果,表2中与表1中的id匹配的每一行有1个结果。如何使用适当的查询语句来避免这种情况


提前感谢。

如果您知道将获得的所有列,您可以使用案例陈述,如下所示:

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 

希望这有帮助

“避免这个…”是什么意思?你期望什么?这很好,我曾考虑使用子查询来实现同样的效果,但我认为这更有效。@AntP我开始准确地编写它,然后意识到表结构意味着只有这3项,这应该需要更少的数据传递。@David Manheim有11行,但我不介意这种解决方案,当我在做
时,如果列
value
被命名为
item\u value
,并且
desc
被命名为
item\u desc
,则值结束为desc
,那么,当表2.key='item\u desc'然后item\u值以item\u desc结束时,就会出现
的情况,对吗?@David Manheim谢谢你——经过一些修改,这就是解决方案。谢谢。
SELECT
 table_1.*, 
 MAX(IF(key='desc', value, NULL)) AS 'desc', 
 MAX(IF(key='begin_day', value, NULL)) AS begin_day, 
 MAX(IF(key='end_day', value, NULL)) AS end_day
FROM table_1 
LEFT JOIN table_2 ON (id = table1_id)
GROUP BY id;