首先,我什至不确定是否LEFT JOIN
是做我想做的最好的方式,所以会尽力解释。
我有 2 个表 - 一个包含站点列表,另一个包含角色列表。一个用户可能只有一个角色,但他们可能拥有与站点一样多的角色。
表“网站”
site_id | site_name | site_domain
---------------------------------------
1 | Site A | sitea.com
2 | Site B | siteb.com
表“角色”
site_id | user_id | role_id
---------------------------------
1 | 1 | 1
1 | 2 | 1
2 | 2 | 2
如我上面的示例,用户 1 在一个站点上只有一个角色,但用户 2 在两个不同的站点上具有两个角色。
我想要做的,可能只是一个星期天晚上,而不是直截了当的事情,就是列出一个站点列表,以及每个用户的角色 - 如果用户的该站点不存在角色,然后返回 NULL(或 0)。
输出应如何产生的两个示例:
用户 1
site_id | site_name | site_domain | role_id
----------------------------------------------
1 | Site A | sitea.com | 1
2 | Site B | siteb.com | NULL
用户 2
site_id | site_name | site_domain | role_id
----------------------------------------------
1 | Site A | sitea.com | 1
2 | Site B | siteb.com | 2
我现在的查询如下,但是,第二个站点没有出现,因为用户没有定义角色(即像上面一样,但对于用户 1,第二个站点 B 不会列出)。我知道我只是错过了一些东西,但今晚想不起来:o(
SELECT site_id, site_name, site_domain, role_id
FROM `sites`
LEFT JOIN `roles`
ON sites.site_id=roles.site_id
WHERE roles.user_id='1'