1

表:用户

ID 编译ID
1 补偿1
2 补偿1

表:公司

ID 姓名
补偿1 可乐
补偿2 百事可乐

需要一个 MYSQL 查询,只有当它有一个或多个用户时,它才应该获取公司记录,当传递一个公司 ID 时。我将在公司表上有其他条件。

这可以通过连接来实现吗?

示例 1:查询(comp1)结果:可乐(至少存在一个用户)

示例2:查询(comp2)结果:没有记录(因为不存在属于comp2公司的用户)

4

1 回答 1

0

您要求的称为semi-joincompany如果 中有一个或多个匹配行,则返回一行user

如果您使用常规联接:

SELECT c.* FROM company c JOIN user u ON u.compid = c.id;

这确实会从公司返回该行,但您可能不喜欢它为每个用户返回一行。即结果中的行乘以匹配数。

对此有几种可能的解决方法,以将结果减少到每家公司一行。

SELECT DISTINCT c.* FROM company c JOIN user u ON u.compid = c.id;

SELECT c.* FROM company c JOIN (SELECT DISTINCT compid FROM user) u ON u.compid = c.id;

SELECT * FROM company c WHERE c.id IN (SELECT compid FROM user);

SELECT * FROM company c WHERE EXISTS (SELECT * FROM user WHERE compid = c.id);

哪一个最适合您的应用程序取决于许多因素,例如表的大小、查询中的其他条件等……我会根据您的特定需求来评估它们。

于 2021-09-22T14:08:11.257 回答