我有下表tbl_info
---------------------------------------
| id | parentid | sortsequence |
|--------------------------------------
| 1 | 0 | 1 |
|--------------------------------------
| 2 | 1 | 1 |
|--------------------------------------
| 3 | 1 | 1 |
|--------------------------------------
| 4 | 1 | 2 |
|--------------------------------------
| 5 | 0 | 1 |
|--------------------------------------
| 6 | 5 | 1 |
|-------------------------------------|
| 7 | 5 | 2 |
我的问题
我需要找出那些记录的 id 及其子 id(其中某些记录的 id 作为 parentid 存在),其子sortsequence
列不是唯一的。例如,如果id 1
有孩子2,3,4
,那么 sortsequence2,3,4
必须是唯一的。如果它们不是唯一的,它们就是错误的记录,我需要找出这些记录。
评论后更新
父子关系由id
和parentid
字段组成。如果id
某些记录parentid
与其他记录一样存在,则这些其他记录是这些记录的子项。现在我需要找出那些parentid
相同但 sortsequence 不是唯一的记录。 理想条件和正确条件是所有 parentid 相同的记录,则 sortsequence 必须是 unqiue。在上述情况下,记录2,3,4
是错误的记录。我需要找出这些记录
到目前为止我做了什么
我搜索了很多并写了这个查询
SELECT id, parentid, tbl_info.sortsequence FROM tbl_info
INNER JOIN (SELECT sortsequence FROM tbl_info
GROUP BY sortsequence HAVING COUNT(id) > 1) dup ON tbl_info.sortsequence = dup.sortsequence
此查询首先查找排序顺序相同但我需要查找的所有记录parentid
。其次,我在这个表中有数百万条记录,所以我需要一个处理时间最短的查询。