こんにちは、次の表があります
------------------------------------------
| id | language | parentid | no_daughter |
------------------------------------------
| 1 | 1 | 0 | 2 |
------------------------------------------
| 1 | 1 | 0 | 2 |
------------------------------------------
| 2 | 1 | 1 | 1 |
------------------------------------------
| 2 | 2 | 1 | 1 |
------------------------------------------
| 3 | 1 | 1 | 0 |
------------------------------------------
| 3 | 2 | 1 | 0 |
------------------------------------------
| 4 | 1 | 2 | 0 |
------------------------------------------
| 4 | 2 | 2 | 0 |
------------------------------------------
| 5 | 1 | 2 | 0 |
------------------------------------------
| 5 | 2 | 2 | 1 |
-----------------------------------------
| 5 | 1 | 4 | 1 |
------------------------------------------
| 5 | 2 | 4 | 1 |
------------------------------------------
シナリオ
language
すべてのレコードには、異なるIDを持つテーブルに複数の行があります。parentid
このレコードの親が誰であるかを示します。no_daughter
列は、各レコードに対して、1つのレコードにいくつの子があるかを示します。理想的なシナリオでの手段no_daughter
値2
がの場合、同じテーブル内の2つのレコードである必要があるid = 1
ことを意味します。ただし、レコードに言語に関して複数の出口がある場合、それは1つのレコードと見なされます。1
parentid
私の問題
no_daughter
値が正しくないレコードを見つける必要があります。つまり、が2の場合、そのIDを持つno_daughter
レコードが2つ存在する必要があります。parentid
上記の場合、とのレコードid = 1
は有効です。ただし、このレコードの実際の娘は2でid = 2
あるため、レコードを持つことは無効です。no_daughter = 1
id=4
誰かがこれらの欠陥のある記録をどのように見つけることができるか教えてもらえますか?
回答後に更新
ケンクラークは持っていて、ショラは同じ結果を返す答えを出しました。たとえば、ショラクエリは
SELECT DISTINCT
id
FROM
tbl_info t
INNER JOIN
(SELECT
parentid,
COUNT(DISTINCT id) AS childs
FROM
tbl_info
GROUP BY parentid) AS parentchildrelation
ON t.id = parentchildrelation.parentid
AND t.no_daughters != parentchildrelation.childs
parentid
このクエリは、テーブルのどこかで使用されているが、値が間違っているIDを返しno_daughter
ます。no_daugter
ただし、列に値がparentid
あるが、テーブルのどこにも使用されていないIDは返しません。たとえば、持っid = 5
ていますが、表のようにno_daughter = 1
使用されていません。parentid
ですから、それはまた欠陥のある記録です。しかし、上記のクエリはそのようなレコードをキャプチャしていません。
どんな助けでも大歓迎です。