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
使用这个查询
SELECT c.*
FROM categories c
INNER JOIN images i ON i.category_id = c.id
GROUP BY i.category_id
我在 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
使用这个查询
SELECT c.*
FROM categories c
INNER JOIN images i ON i.category_id = c.id
GROUP BY i.category_id