- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 MSSQL Server 2008 Enterprise Edition,以及很可能的其他版本的 MSSQL,这里是一个概念证明,它根据您使用的是 JOIN 还是 LEFT JOIN 来创建临时表并具体化 NEWID(),即使我们是完全匹配两行。
如果查看执行计划,您可以看到获取 NEWID() 的计算标量是最后使用 JOIN 执行的,但在使用 LEFT JOIN 时则不是。我本来期望 LEFT JOIN 行为。这种奇怪的现象是由于执行计划中的幼稚造成的还是还有其他原因?
使用临时表进行演示:
Create Table #Temp
(
ChildGuid uniqueidentifier,
ParentGuid uniqueidentifier
)
insert into #Temp (ChildGuid, ParentGuid) Values('5E3211E8-D382-4775-8F96-041BF419E70F', '96031FA0-829F-43A1-B5A6-108362A37701')
insert into #Temp (ChildGuid, ParentGuid) Values('FFFFFFFF-D382-4775-8F96-041BF419E70F', '96031FA0-829F-43A1-B5A6-108362A37701')
--Use a join. Get different NewIDs.
select * from #Temp
join
(
select ParentGuid, NewParentGuid from(
select ParentGuid, NEWID() as NewParentGuid from #Temp
group by ParentGuid
) tb2
) temp2 on #Temp.ParentGuid = temp2.ParentGuid
--Do exactly as above, but use a left join. Get a pair of the same NewIDs.
select * from #Temp
left join
(
select ParentGuid, NewParentGuid from(
select ParentGuid, NEWID() as NewParentGuid from #Temp
group by ParentGuid
) tb2
) temp2 on #Temp.ParentGuid = temp2.ParentGuid
使用 Join 时,两行的 NewParentGuid 都不同。
对于 Left Join,NewParentGuid 是相同的。
编辑2:如果将其附加到左连接,结果会发生变化。
where temp2.ParentGuid = temp2.ParentGuid
或者正如另一位用户指出的那样,该列不为空。在其他列或 1=1 的情况下进行比较时,它们将保持不变。薛定谔的列?
另请参阅:
最佳答案
这并不是真正的答案,而是观察
这将返回重复的内容
select * from #Temp
inner hash join
(
select ParentGuid, NEWID() as NewParentGuid
from #Temp
group by ParentGuid
union
select null, NEWID()
) temp2
on #Temp.ParentGuid = temp2.ParentGuid
--Do exactly as above, but use a left join. Get a pair of the same NewIDs.
select * from #Temp
left hash join
(
select ParentGuid, NEWID() as NewParentGuid
from #Temp
group by ParentGuid
) temp2
on #Temp.ParentGuid = temp2.ParentGuid
这迫使它们变得不同
select * from #Temp join (
select ParentGuid, NEWID() as NewParentGuid
from #Temp
group by ParentGuid ) temp2
on #Temp.ParentGuid = temp2.ParentGuid
--Do exactly as above, but use a left join. Get a pair of the same NewIDs. select * from #Temp left join (
select ParentGuid, NEWID() as NewParentGuid
from #Temp
group by ParentGuid ) temp2
on #Temp.ParentGuid = temp2.ParentGuid
and temp2.ParentGuid is not null
关于sql - 为什么左连接会导致 NEWID() 比连接更早实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26045081/
我安装了 fakeLoader (jquery 预加载器)但我无法在页面加载前显示它。 在 mozilla 中它几乎可以正常工作(奇怪的是......),但在 Chrome 和 Opera 中,页面首
我试图通过以下代码在触摸事件上移动 ImageView: public class ScrollableImageView extends ImageView { private Gestur
我是一名优秀的程序员,十分优秀!