![]() |
1
1
关于你是否想 防止 从插入数据库中复制。您可能只想获取唯一的对,同时保留重复项。 因此,对于后一种情况,这里有一个可选的解决方案,查询唯一的对,即使存在重复项:
因此,如果有一个与ID相反的匹配行,那么就有一个规则,查询应该选择哪个行(ID是按数字顺序排列的)。 如果没有匹配的行,那么r2将为空(这是外部联接的工作方式),因此在这种情况下只使用在r1中找到的任何内容。
无需使用
在mysql中尝试,我得到了以下优化计划:
这似乎是索引的一个合理的好用法。 |
![]() |
2
4
关系是否总是双向的?也就是说,如果约翰和吉尔有亲戚关系,那有没有 总是 A约翰,吉尔和吉尔,约翰?如果是这样的话,只需限制在人1<人2的地方,并采用不同的集合。 |
![]() |
3
3
|
![]() |
4
3
未经测试的:
为了防止出现这样的重复条目,您可以使用相同的思想添加一个唯一的索引(tested!):
当做, Rob。 |
![]() |
5
2
您应该在
这样就可以确保(2,1)永远不会被插入——它必须是(1,2)。那么,主键约束将防止重复。 附言:我看到马克·格雷维尔的回答比我快,有一个类似的解决办法。 |
![]() |
6
0
我认为像这样的事情应该可以做到:
|
![]() |
7
0
“我想KM差不多把它弄好了,”我补充说。
|
![]() |
8
0
这是愚蠢的,但它至少会告诉你你有什么独特的组合,只是不是在一个真正方便的方式…
|
![]() |
9
0
可能最简单的解决方案(不需要更改数据结构或创建触发器)是创建一组不带重复项的结果,并将其中一个重复项添加到该集合中。 看起来像:
但通常我不会创建没有单列主键的表。 |
![]() |
10
0
你可以, with rel as ( select *, row_number() over (partition by least(person_1,person_2), greatest(person_1,person_2)) as rn from relationships ) select * from rel where rn = 1; |
![]() |
maddy · 如何根据oracle SQL中的某一列值进行排名 1 年前 |
![]() |
kiric8494 · 显示以元音开头和结尾的城市名称 2 年前 |
![]() |
Franz Biberkopf · Oracle:组合子查询和聚合函数 2 年前 |
![]() |
BitLauncher · 甲骨文-如何模拟位列和布尔和/或? 2 年前 |
![]() |
Arifullah · 如何从oracle中的列中删除特定的初始字符? 2 年前 |
![]() |
Anar · Oracle SQL用户定义函数 2 年前 |
![]() |
user1312312 · 如何为一组表编写通用触发器? 3 年前 |