我有表users、locations和一个连接表。连接表还具有该位置的每个人的排名值,因为这些个人在某些位置的排名高于其他位置。
users
=========
id | name
=========
 1 | john
 2 | bob
 3 | alex
locations
===============
id | name
===============
 1 | san diego
 2 | dallas
 3 | new york
 4 | denver
join_users_locations
==============================
user_id | location_id | rank
==============================
      2 |           1 | 4
      2 |           2 | 3
      2 |           4 | 2
      3 |           1 | 2
      3 |           2 | 4您可以看到,在连接表中,只有当用户在该位置具有排名时,才会列出该用户。如果它们的等级为零/空,则它们甚至不在表中。
我想得到这样的查询结果:
name |  location | rank 
=======================
 bob | san diego | 4
 bob |    dallas | 3
 bob |  new york | 0
 bob |    denver | 2正如您所看到的,我希望所有位置都在列表中,即使是用户未连接的位置(只需将这些字段的等级值设置为零)。
很容易获得他/她加入的位置和排名的列表:
SELECT
    u.name,
FROM users u
LEFT JOIN join_users_locations jul ON jul.user_id = u.id
LEFT JOIN locations l ON l.id = jul.location_id
WHERE u.id = 2但这只列出了用户加入的位置。我还想看看未加入的位置。
我知道这是可能的,但我不确定解决方案是什么。我尝试了一些不同类型的连接,得到了不同的结果。
SQL FIDDLE HERE
发布于 2012-03-08 05:32:09
左外部联接。外部连接包括连接“左侧”的所有内容,即使左侧没有相应的元组。不过,您可能会得到null而不是0。这样可以吗?(如果不是,可以将空值显示设置为0 )
https://stackoverflow.com/questions/9609355
复制相似问题