1

こんにちは、次の表があります

------------------------------------------
| 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_daughter2がの場合、同じテーブル内の2つのレコードである必要があるid = 1ことを意味します。ただし、レコードに言語に関して複数の出口がある場合、それは1つのレコードと見なされます。1parentid

私の問題

no_daughter値が正しくないレコードを見つける必要があります。つまり、が2の場合、そのIDを持つno_daughterレコードが2つ存在する必要があります。parentid上記の場合、とのレコードid = 1は有効です。ただし、このレコードの実際の娘は2でid = 2あるため、レコードを持つことは無効です。no_daughter = 1id=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ですから、それはまた欠陥のある記録です。しかし、上記のクエリはそのようなレコードをキャプチャしていません。

どんな助けでも大歓迎です。

4

3 に答える 3

2

これを試して:

SELECT DISTINCT 
      id 
FROM
   tbl_info t 
Left JOIN 
   (SELECT 
       parentid,
       COUNT(DISTINCT id) AS childs 
   FROM
       tbl_info 
   GROUP BY parentid) AS parentchildrelation 
   ON t.id = parentchildrelation.parentid 
  Where t.no_daughters != parentchildrelation.childs 
于 2013-03-25T15:44:35.150 に答える
1

これを試して:

SELECT id FROM tinfo t inner join
(SELECT parentid, COUNT(distinct language ) as childs FROM tinfo group by parentid) as     summary
on t.id=summary.parentid and t.no_daughters!= summary.childs
于 2013-03-22T07:44:04.053 に答える
1

これを試して

 Select Distinct * From tablename t
 Left Join
 (
   Select COUNT(t1.Id) Doughter,t1.parentid,t1.language From tablename  t1 Group By t1.parentid,t1.language
 )tbl
 On t.id=tbl.parentid And tbl.language=t.language And t.no_daughter<>tbl.Doughter
于 2013-03-22T08:08:55.040 に答える