gpt4 book ai didi

mysql - Mysql中如何将表与空表连接起来

转载 作者:行者123 更新时间:2023-11-29 12:07:26 25 4
gpt4 key购买 nike

我有四个这样的表:

公司(名称、描述)

company_users(company_id,user_id)

用户(id、group_id)

用户个人资料(用户 ID,全名)

我想列出广告系列。

我的代码是这样的:

SELECT companies.*, user_profiles.fullname as company_contact
FROM companies
INNER JOIN company_users ON companies.id = company_users.company_id
INNER JOIN users ON company_users.user_id = users.id AND users.group_id=500
INNER JOIN user_profiles ON users.id = user_profiles.user_id;

当我添加新的广告系列时,没有出现。因为company_id不在company_users中。

我该如何解决这个问题?

注意:每个营销事件只能有一名用户。该用户的group_id是500。

谢谢

编辑:

表格:

companies
1 | Test Company | Test Desciption
2 | Test Company 2 | Test Description 2



company_users
1 | 18 | 1
2 | 19 | 1

users
18 | 500
19 | 900


user_profiles
18 | 18 | Test Contact
19 | 19 | Test User

左连接结果:

1   Test Company    Test Description    Test Contact
1 Test Company Test Description NULL
2 Test Company 2 Test Description 2 NULL

内连接结果:

1   Test Company    Test Description    Test Contact

我需要这个:

1   Test Company    Test Description    Test Contact
1 Test Company 2 Test Description 2 NULL

最佳答案

听起来我们想要外连接操作。

我们可以替换所有出现的关键字 INNER使用关键字 LEFT .

然后查询将返回 companies 中的行即使在company_users中没有找到匹配的行。

编辑

在回答问题时进行编辑,提供附加信息。

如果我们想要返回公司中的每一行,以及相关用户的单行的全名(如所需结果集中所示),我们可以在 SELECT 列表中使用关联子查询,而不是联接操作.

例如:

  SELECT c.*
, ( SELECT p.fullname
FROM company_users cu
JOIN users ON u.id = cu.user_id AND u.group_id=500
JOIN user_profiles p ON p.user_id = u.id
WHERE cu.company_id = c.id
ORDER BY p.fullname ASC
LIMIT 1
) AS company_contact
FROM companies c

子查询包含对 id 的引用companies 中的专栏。对于从外部查询返回的每一行(来自 companies 的每一行),将使用 id 执行 SELECT 列表中的子查询。值来自companies行,

如果子查询没有找到要返回的行,则返回 NULL 值。 LIMIT 1子句确保我们最多返回一行(如果子查询返回多于一行,则会返回错误。)ORDER BY包含在内只是为了使结果更具确定性。也就是说,如果子查询碰巧返回多于一行,则ORDER BY将对行进行排序,并且 LIMIT 1将获得排序后的第一行。

关于mysql - Mysql中如何将表与空表连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com