5
|
Austin Salonen gmlacrosse · 技术社区 · 16 年前 |
![]() |
1
7
这更有效(它使用
|
![]() |
2
6
可能不是最便宜的方法:
您可以看到,基本上我正在为每个表创建一个新的结果集,代表每个表中每个Id的值集的一个值,并仅在匹配的地方连接。 |
![]() |
3
2
以下查询将为您提供请求的结果:
|
![]() |
4
1
适用于您的示例,我认为它适用于所有情况,但我还没有彻底测试它:
|
![]() |
5
1
--注意,只有在两个表中都不允许有重复值的情况下才有效 声明@有效比较表( pkid INT, 其他ID INT, 编号INT ) 插入@validcomparisons(pkid、otherid、num) 选择a.pkid、b.otherid、a.cnt FROM(选择pkid,按pkid计数(*)为cnt FROM@a组)a INNER JOIN(选择otherid,按otherid从@b组中计数(*)作为cnt)b ON b.cnt=交流 声明@对照表( pkid INT, 其他ID INT, 相同的INT) 插入@comparison(pkid、otherid、same) 选择a.pkid、b.otherid、count(*) 来自@a 内部加入@b b ON a.value=b.value 分组方式a.pkid,b.otherid 选择COMP。PKID,COMP。其他ID 来自@比较comp 加入@validcomparisons val ON comp.pkid=val.pkid AND comp.therid=val.therid AND comp.same=val.num |
![]() |
6
1
我添加了一些额外的测试用例。您可以通过更改在聚合中使用不同关键字的方式来更改重复处理。基本上,我正在计算匹配数,并将其与每个@a和@b中所需的匹配数进行比较。
|
![]() |
7
1
恐怕这个定义不太清楚。从您的附加示例中可以看出,您想要所有a.pkid、b.otherID对,其中给定b.otherIID的每个b.value也是给定a.pkid的a.value。 换言之,你希望@a中的pkids具有 不少于 b中otherIDs的所有值。@a中的额外值似乎是可以的。同样,这是基于您的附加示例以及(1,-2)和(2,-2)是有效结果的假设的推理。在这两种情况下,给定pkid的a.value值为 超过 给定otherID的b.value值。 因此,考虑到这一点:
|
![]() |
8
0
要进一步迭代该点:
这将返回@a中与@b匹配的所有值 |
![]() |
9
0
如果你只想返回完整的记录集,你可以试试这个。不过,我绝对建议使用有意义的别名。.. Cervo是对的,我们需要进行额外的检查,以确保a是b的精确匹配,而不是b的超集。在这一点上,这是一个更难处理的解决方案,因此这只有在其他解决方案中的分析函数不起作用的情况下才是合理的。
|
![]() |
10
0
1) 我假设你没有重复的id 2) 获取具有相同数值的密钥 3) 键值数量等于相等值数量的行是目标 我希望这就是你搜索的(你不搜索性能,不是吗?)
|
![]() |
11
0
有几种方法可以做到这一点,但一个简单的方法是创建一个联合视图,如下所示
注意使用union-all,而不是简单的union,因为这会省略重复项 那就这么做
Union和Having语句往往是标准SQL中最容易被忽视的部分,但它们可以解决许多需要过程代码的棘手问题 |
![]() |
12
-1
正如CQ所说,你只需要一个简单的内部连接。
|
![]() |
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 2 年前 |
![]() |
Nick Fleetwood · 调度语法的LINQ查询 3 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 3 年前 |
![]() |
Java · 使用交叉应用同时显示两列 3 年前 |