Sql 仅当相关的其他 table 记录存在时才获取记录

Sql to fetch records only if related other table records exist

Table:用户

id compId
1 comp1
2 comp1

Table:公司

id name
comp1 coke
comp2 pepsi

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

上有其他条件

这可以通过连接实现吗?

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

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

您要求的是 半连接。如果 user 中有一行或多行匹配,则此 return 是 company 的一行。

如果您使用常规连接:

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

这会 return 公司的行,但您可能不喜欢它 return 每个用户 一行 。 IE。结果中的行乘以匹配数。

有几种可能的修复方法,可以将每个公司的结果减少到一行。

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);

哪一个最适合您的应用程序取决于许多因素,例如表的大小、查询中的其他条件等...我将根据您的具体需求留给您进行评估.