こんにちは私は次のようなテーブルを持っています
-----------------------------------------------------------
| id | group_id | source_id | target_id | sortsequence |
-----------------------------------------------------------
| 2 | 1 | 2 | 4 | 1 |
-----------------------------------------------------------
| 4 | 1 | 20 | 2 | 1 |
-----------------------------------------------------------
| 5 | 1 | 2 | 14 | 1 |
-----------------------------------------------------------
| 7 | 1 | 2 | 7 | 3 |
-----------------------------------------------------------
| 20 | 2 | 20 | 4 | 3 |
-----------------------------------------------------------
| 21 | 2 | 20 | 4 | 1 |
-----------------------------------------------------------
シナリオ
処理する必要がある2つのシナリオがあります。
Sortsequence
列の値は、1source_id
とに対して一意である必要がありgroup_id
ます。たとえば、持っているすべてのレコードがgroup_id = 1 AND source_id = 2
一意のソートシーケンスを持つ必要がある場合です。上記の例では、id= and 5 which are having group_id = 1 and source_id = 2 have same sortsequence which is 1
。これは誤った記録です。これらの記録を見つける必要があります。- 同じ場合
group_id and source_id
。sortsequence columns value should be continous. There should be no gap
。_ たとえば、上記の表にありますrecords having id = 20, 21 having same group_id and source_id and sortsequence value is 3 and 1
。これもユニークですが、sortsequence値にギャップがあります。これらの記録も調べる必要があります。
私のこれまでの努力
クエリを書きました
SELECT source_id,`group_id`,GROUP_CONCAT(id) AS children
FROM
table
GROUP BY source_id,
sortsequence,
`group_id`
HAVING COUNT(*) > 1
このクエリはシナリオ1のみを対象としています。シナリオ2を処理する方法は?同じクエリでそれを行う方法はありますか、または2番目のシナリオを処理するために他を作成する必要があります。
By the way query will be dealing with million of records in table so performance must be very good.