gpt4 book ai didi

sql-server - 添加附加条件时出现 "No Join Predicate"- 为什么?

转载 作者:行者123 更新时间:2023-12-02 20:43:13 24 4
gpt4 key购买 nike

一般来说,我有一个非常简单的查询,并且不明白为什么实际执行计划在“嵌套循环”节点上进行初始选择后立即向我显示警告“无连接谓词”。

我认为该查询非常不言自明:我有用户,他们有对 Feed 的 UserSubscriptions (m:n) - 我想从用户必须订阅的一个 Feed 中查询所有 FeedItems,所以这个查询非常适合这样做嗯:

select fi.Title, fi.Content, fi.Published
from [User] u
inner join UserSubscription us on u.id = us.UserId
inner join Feed f on f.id = us.FeedId
inner join FeedItem fi on fi.FeedId = f.Id
where u.EMailAddress = 'xxx@xxx.xx'
and f.id = 3
and fi.Inserted > getdate() - 30

有趣的是,只要我忽略这个条件,就不会出现警告:

and f.id = 3

一旦我删除它,有关缺少连接谓词的警告就会消失。我不明白这里出现此警告的原因。

任何帮助理解这一点的帮助将不胜感激!

谢谢b.

最佳答案

您不需要加入 Feed 表的原因是:

  1. f.id = us.FeedId = fi.FeedId
  2. 查询中的其他任何地方(SELECTWHERE)都不会使用/不需要 f(Feed)表

这是一个更优化的查询:

select fi.Title, fi.Content, fi.Published
from [User] u
inner join UserSubscription us on u.id = us.UserId and us.FeedId = 3
inner join FeedItem fi on fi.FeedId = us.FeedId
where u.EMailAddress = 'xxx@xxx.xx'
and fi.Inserted > getdate() - 30

通过提前将其限制为特定的 FeedId,您可以使数据集更小,从而更快。优化器可能会为您将查询更改为此;我不确定。

关于sql-server - 添加附加条件时出现 "No Join Predicate"- 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16342582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com