SQL查询(无重复连接)

ann*_*irq 1 sql postgresql having

我有桌子userstopics.每个用户可以拥有0到几个主题(一对多关系).

我如何才能获得至少有一个主题的用户?

我需要来自用户的所有列(没有主题中的列),并且表中没有重复项users.在上一篇专栏文章中,我需要多少主题.

更新:

应该是这样的:

SELECT user.*, count(topic.id) 
FROM ad
LEFT JOIN topic ON user.id = topic.ad
GROUP BY user.id
HAVING count(topic.id) > 0;
Run Code Online (Sandbox Code Playgroud)

但它需要0结果.但它不应该是0.

小智 5

首先,您需要拥有两个表,因为您已经留下了有关表结构的有限信息,我将使用一个示例来解释其工作原理,然后您应该可以轻松地将其应用于您自己的表.

首先你需要有两个表(你做的)

表"用户"

id | name
1  | Joe Bloggs
2  | Eddy Ready
Run Code Online (Sandbox Code Playgroud)

表"主题"

topicid | userid | topic
      1 |      1 | Breakfast
      2 |      1 | Lunch
      3 |      1 | Dinner
Run Code Online (Sandbox Code Playgroud)

现在要求对每个用户进行计数是使用以下方法完成的;

SELECT user.name, count(topic.topicid) 
FROM user
INNER JOIN topic ON user.id = topic.userid
GROUP BY user.name
Run Code Online (Sandbox Code Playgroud)

如果您使用左连接,这将包括来自"user"表的记录,该表在"topic"表中没有任何行,但是如果您使用INNER JOIN,则这将只包括在两个表中具有匹配值的用户.

即因为用户ID"2"(我们用于加入)未在主题表中列出,您将无法获得该用户的任何结果.

希望有所帮助!