表A(一个表)和表B(多个表)之间有一对多的关系。
我想查询表A,只返回表A中表B中至少有一行的条目。
我认为它可能是一个内连接,但我仍然在表B中为每个条目返回一行。
SELECT * FROM categories.* INNER JOIN images ON images.category_id = categories.id
那是我当前的查询,我认为这是我需要添加的WHERE
子句,但我不知道是什么。
我很抱歉这是一个如此简单的问题,我无法自己找到答案,我认为我写错了。
答案 0 :(得分:2)
要获取表b中至少有一个关联的类别数据(不是图像数据),您可以执行以下操作
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
或者没有聚合只是区别并加入
SELECT DISTINCT c.*
FROM categories c
INNER JOIN images i ON i.category_id = c.id
答案 1 :(得分:1)
你可以通过多种方式做到。 一个人可能会跟随。它在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)
答案 2 :(得分:1)
您可以使用左/右连接。
SELECT * FROM categories.* I
RIGHT JOIN images
ON images.category_id = categories.id
在你的情况下,我认为表A是类别和表B图像。 如果相反,请尝试使用左连接
答案 3 :(得分:1)
使用此查询
SELECT c.*
FROM categories c
INNER JOIN images i ON i.category_id = c.id
GROUP BY i.category_id