嗨,我似乎找不到编写此查询的正确方法。我有两个实体网站和客户端,以及一个通过它们的 id 字段关联它们的表。
这是多对多的关系。即一个网站可以有多个客户,一个客户可以有多个网站。
我正在尝试编写一个查询,该查询返回所有网站以及属于它们的客户端。我想退回所有网站,即使它们没有与之关联的客户。这是我目前正在使用的查询:
这三个表是 ost_sites = 网站,ost_site_auth = 关系表,ost_clients = 客户
SELECT
ost_sites.site_id,
ost_sites.name,
ost_sites.site_url,
ost_site_auth.site_id,
ost_site_auth.client_id
ost_clients.client_id,
CONCAT_WS(" ", ost_clients.lastname, ost_clients.firstname) as name,
FROM ost_sites
LEFT JOIN (ost_site_auth, ost_clients)
ON (ost_sites.site_id=ost_site_auth.site_id
AND ost_site_auth.client_id=ost_clients.client_id)
GROUP BY ost_sites.name
我得到一个结果集,但它没有返回所有站点,并且所有行都没有与之关联的客户端。
非常感谢您的帮助!
编辑:
以下是表格的列:
ost_site
site_id | name | site_url
1 facebook facebook.com
2 twitter twitter.com
3 tubmblr tumblr.com
4 google google.com
ost_site_auth
(注意身份验证列表中没有 site_id = 3)
id | site_id | client_id
1 1 1
2 1 2
3 2 1
4 2 2
5 4 1
6 4 4
ost_client
client_id | firstname | lastname
1 wilma flintstone
2 bam bam
3 fred flintstone
4 barney rubble
预期输出:
site_id | name | site_url | client_name |
1 facebook facebook.com wilma flintstone
1 facebook facebook.com bam bam
2 twitter twitter.com wilma flintstone
2 twitter twitter.com bam bam
4 google google.com wilma flintstone
4 google google.com barney rubble
3 tumblr tumlr.com NULL