私は次の表を持っています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
。次に、このテーブルには数百万のレコードがあるため、処理時間が最小限のクエリが必要です。