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