SQL:加入多个表

时间:2018-02-22 07:19:56

标签: mysql sql join

我正在尝试加入以下表格:

  • 表1:用户(id,名称)
  • 表2:pivot_table(user_id,user_id2)

此表包含用户之间的关系。一个用户可以与许多其他用户相关。

  • 表3:联系人(id,user_id,名称)

我正在尝试选择一个用户,然后找到其相关的用户和联系人。 我试图使用联接,我成功地获得联系人或用户,但不是两者。

我使用了以下查询:

select
    contacts.id as contact_id,
    users.id as user_id,
    pivot.user_id2 as user2_id
from
    `contacts`
    inner join `users` on  `contacts`.`user_id` = `users`.`id`
    inner join `pivot` as `pivot` on `pivot`.`user_id` = `contacts`.`user_id`

假设我在表格中有以下数据

用户:

id   name
1    Sahil
2    Shubham
3    Xyz

数据透视表数据

user_id   user_id2
1         2

通讯录表格数据

id   user_id   name
1    1         Abc
2    1         XYZ

现在查询的内容是

contact_id   user_id   user_id2
1            1         2
2            1         2

但我需要的是

contact_id   user_id   user_id2
1            1         null
2            1         null
null         1         2

我无法弄清楚我在做什么。

由于

4 个答案:

答案 0 :(得分:0)

请改为尝试:

SELECT  B.id as contact_id, A.id as user_id, C.user_id2 as
user2_id
FROM `users` A LEFT JOIN `contacts` B
ON A.`id`=B.`user_id` LEFT JOIN `pivot` C
ON A.`id`=C.`user_id`;

有关使用联接的见解,请参阅MySQL Join Made Easy

答案 1 :(得分:0)

onStartCommand()

答案 2 :(得分:0)

我自己解决了这个问题,使用了Union来获得理想的结果。

感谢您的支持。

答案 3 :(得分:0)

您似乎希望查询显示不相关的数据:

  1. 用户的联系人
  2. 用户的相关用户
  3. 我建议两个单独的查询。如果要在一个查询中执行此操作,请使用UNION ALL组合两个查询结果:

    select contact_id, user_id, null as user_id2 from contacts
    union all
    select null as contact_id, user_id, user_id2 from pivot_table;