我有这个SQL图:
我想让所有订阅者完全喜欢0个报告。
开始于:SELECT * FROM subscriber HAVING count(...)
如何计算订阅者喜欢的记者人数?
关系应该在SQL数据库中获得它自己的表吗?
答案 0 :(得分:0)
我不完全确定我理解你的上一个问题,但这听起来像NOT IN
条款的好时机。
SELECT *
FROM Subscriber
WHERE Id NOT IN (SELECT SubscriberId
FROM Likes
INNER JOIN Reporter ON Reporter.Id = Likes.ReporterId)
那里的内部查询只是查找已报告的所有订户ID,然后外部查询抓取所有其他订户ID。您可以通过将INNER JOIN
更改为另一个IN
来提高此查询的效率,但您必须使用它。
就计算它们的任务而言,我可能只是这样做。你可以分组等,但这很简单,
SELECT *, (SELECT COUNT(*)
FROM Likes
INNER JOIN Reporter ON Reporter.Id = Likes.ReporterId
WHERE Likes.SubscriberId = Subscriber.Id) AS ReportersCount
FROM Subscriber
请注意,对于您列出的查找零记者的任务,第一个查询会更快,因为它可以短路,而不必计算每一行的每个记者。当然,只要你有合适的索引,两者都不应该太糟糕。