合并来自不同表的数据

时间:2017-03-20 13:47:13

标签: mysql

我想我现在有一点停电......

我有几个这样的MySQL表:

预定:

id - int starttime - datetime 结束时间 - 日期时间 user1 - int user2 - int

+--+--------------------+-------------------+-----+-----+
|id|    starttime       |      endtime      |user1|user2|
+--+--------------------+-------------------+-----+-----+
|1 |2017-03-17 15:00:00 |2017-03-17 16:00:00|  1  |  3  |
+--+--------------------+-------------------+-----+-----+

表用户: id - int username - varchar

+--+--------+
|id|username|
+--+--------+
|1 |Rainer  |
|2 |Horst   |
+-----------+

现在我想进行查询,将我的用户的起始时间,结束时间和名称放在一行。

有人可以帮忙吗?

提前致谢。

此致 Gardinero

5 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT b.*, u.username
FROM bookings b
LEFT JOIN users u
ON b.user1 = u.id
  OR b.user2 = u.id

如果您想了解有关加入的更多信息,请创建从一个表到另一个表的连接: https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

我没有测试过这段代码,因此您可能需要在复制粘贴失败时进行调试。

答案 1 :(得分:1)

您需要为每列创建一个联接。试试这个:

SELECT b.*, u1.username username1, u2.username username2
FROM bookings b
LEFT JOIN users u1 ON b.user1 = u1.id
LEFT JOIN users u2 ON b.user2 = u2.id

答案 2 :(得分:0)

这个简单的查询应该可以解决问题:

SELECT bookings.starttime, bookings.endtime, users.username FROM
bookings
INNER JOIN users
ON bookings.user1 = users.id OR bookings.usert = users.id

我测试了查询,效果很好。

答案 3 :(得分:0)

问题是,如果我使用前两个答案中的JOIN,我会得到两个结果。

2017-03-17 15:00:00 - 2017-03-17 16:00:00 - Rainer
2017-03-17 15:00:00 - 2017-03-17 16:00:00 - Horst

但我希望只收到两个用户名的结果:

2017-03-17 15:00:00 - 2017-03-17 16:00:00 - Rainer - Horst

答案 4 :(得分:0)

你需要两次加入同桌

SELECT b.*,u1.*, u2.*
FROM bookings b
LEFT JOIN users u1
ON b.user1 = u1.id
join users u2 b.user2 = u2.id

尝试这个但是需要表中的两个用户