使用 SQL Server 2008,我有 abc 和 xyz 表。
我需要获取所有abc_id,其中xyz_id1的位置等于xyz_id2的位置。(park == park)。xyz_id1和xyz_id2将始终是xyz表中的最小和最大序列号,因此查询中可能会使用max(sequence_id)。
在这个例子中,它将返回'1'。(这将返回许多记录,而不仅仅是标量值)。
我的代码有一些业务逻辑,我不想分享。有人可以提供帮助吗?我相当确定我需要一些子查询或临时表?
abc
abc_id | xyz_id1 | xyz_id2
---------------------------
1 | foo123 | foo125
2 | foo127 | foo129
XYZ表
xyzid | abc_id | location | sequence_id
------------------------------------------
foo123 | 1 | park | 1
foo124 | 1 mall | 2
foo125 | 1 | park | 3
foo127 | 2 | restaurant | 1
foo128 | 2 | lake | 2
... -- several xyz records for order 2
foo130 | 2 | mall | 5
我需要获取所有abc_id,其中xyz_id1的位置等于xyz_id2的位置。(park == park)。xyz_id1和xyz_id2将始终是xyz表中的最小和最大序列号,因此查询中可能会使用max(sequence_id)。
在这个例子中,它将返回'1'。(这将返回许多记录,而不仅仅是标量值)。
我的代码有一些业务逻辑,我不想分享。有人可以提供帮助吗?我相当确定我需要一些子查询或临时表?
GROUP BY
和HAVING
会比另一种连接方式慢10-30倍。 - Jaroslav Jandekxyz.xyzid IN (abc.xyz_id1, abc.xyz_id2)
会被转换为2个索引查找。但我刚刚进行了测试,结果并非如此。这种方法的执行计划确实好得多。 - Martin SmithGROUPING
查询可能会慢40倍(我那里有点偏差)。 - Jaroslav Jandek