私は次の表を持っています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 |
私の問題
sortsequence子の列が一意ではないレコードの ID とその子の ID (親 ID として存在するレコードの ID) を見つける必要があります。たとえば、id 1子を持つ場合2,3,4、sortsequence は2,3,4一意である必要があります。それらが一意でない場合、それらは欠陥のある記録であり、そのような記録を見つける必要があります。
コメント後に更新
idフィールドとフィールドから親子関係が成り立ってparentidいます。idあるレコードが他のレコードと同じように存在する場合parentid、これらの他のレコードはそれらのレコードの子です。ここで、parentid同じであるが sortsequence が一意でないレコードを見つける必要があります。 理想的な条件と正しい条件は、parentid と sortsequence が同じであるすべてのレコードが一意でなければならないことです。上記の場合、レコード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
このクエリは、最初に sortsequence が同じであるすべてのレコードを検索しますが、 に関して調べる必要がありますparentid。次に、このテーブルには数百万のレコードがあるため、処理時間が最小限のクエリが必要です。