MySQL一对多Select

MySQL One to Many Select

我在 Table A(一个 table)和 Table B(多个 table)之间存在一对多关系。

我想查询 Table A,并且只查询 Table A 中的 return 个条目,其中它在 Table B 中至少有一行。

我认为这可能是内部联接,但我仍然为 Table B 中的每个条目得到一行 returned。

SELECT * FROM categories.* INNER JOIN images ON images.category_id = categories.id

这是我当前的查询,我认为这是一个 WHERE 我需要添加的子句,但我不知道是什么。

很抱歉,这是一个如此简单的问题,我自己找不到答案,我想我的措辞有误。

您可以通过多种方式进行。 一个可能正在跟随。它在 WHERE 条件下使用 EXISTS:

SELECT * 
FROM categories
WHERE EXISTS (SELECT 1 FROM images WHERE images.category_id = categories.id)

另一个可以在子查询中使用 DISTINCT(但我认为性能比前者差):

SELECT * 
FROM categories
INNER JOIN (SELECT DISTINCT category_id FROM images) images ON images.category_id = categories.id)

要在 tableb 中获取至少有一个关联的类别数据(不是图像数据),您可以执行如下操作

SELECT c.* 
FROM categories c
INNER JOIN images i ON i.category_id = c.id
GROUP BY c.id
HAVING COUNT(DISTINCT i.id) > 0

或者没有聚合只是 distinct 和 join

SELECT DISTINCT  c.* 
FROM categories c
INNER JOIN images i ON i.category_id = c.id

您可以使用left/right加入。

SELECT * FROM categories.* I
RIGHT JOIN images 
ON images.category_id = categories.id

在你的情况下,我假设 Table A 是类别,Table B 图像。 如果相反,请尝试使用 Left join

https://www.w3schools.com/sql/sql_join_left.asp

使用这个查询

SELECT c.* 
FROM categories c
INNER JOIN images i ON i.category_id = c.id
GROUP BY i.category_id