2017-05-17 6 views
0

테스트 뱅크의 두 가지 질문의 유사성을 포함하는 테이블이 있습니다. enter image description hereMySQL DELETE 행 ORDER BY COUNT DESC

이 question_id 6 유사한 84 %가 10 question_id을 의미하는 것이다. 그리고 question_id 6과 비슷한 질문이 12 개 있습니다.

가장 관련있는 질문 또는 상위 7 개 관련 질문.

내가 Mysql delete order by 본과 시도 :

DELETE FROM  exam_relatedquestion 
WHERE 
    `exam_relatedquestion`.id IN (
     SELECT 
      `exam_relatedquestion`.id 
     FROM 
      (
       SELECT `exam_relatedquestion`.id 
       FROM `exam_relatedquestion` 
       GROUP BY 
        `exam_relatedquestion`.from_question_id_id 
       ORDER BY 
        `exam_relatedquestion`.similarity DESC 
       LIMIT 7 
      ) a 
    ) 

그러나 오류 메시지는 다음과 같습니다

[ERR] 1055 - SELECT 목록의 발현 # 1 절 에 의해 그룹에서하지 않고 이 기능적으로 GROUP BY 절의 열에 종속되지 않는 비 집계 된 열 'den.exam_relatedquestion.id'를 포함합니다. 이

ONLY_FULL_GROUP_BY 어떻게 질문의 7 대 관련이없는 모든 행을 삭제할 수 = sql_mode와 호환되지?

+1

을 : 어떤 경우에

, 당신은 join을 사용하여 다음 질문을 열거 변수를 사용 할 수 있습니까? –

+0

@TimBiegeleisen 그룹에서 'from_question_id_id'로 질문을보고 관련성이 높은 상위 항목을 보존하고 싶습니다. 그러나 나는 올바른 방법이 무엇인지 모른다. – Aaron

답변

1

작동하지 않습니다. 정렬이 잘못된 방향이기 때문에 의사 코드가 올바르지 않습니다. 당신이 처음에`GROUP BY`를 사용하는 이유는

delete erq 
    from exam_relatedquestion erq join 
     (select erq2.*, 
       (@rn := if(@q = erq2.from_question_id_id, @rn + 1, 
          if(@q := erq2.from_question_id_id, 1, 1) 
          ) 
       ) as seqnum 
      from exam_relatedquestion erq2 cross join 
       (select @rn := 0, @q := -1) params 
      order by erq2.from_question_id_id, score desc 
     ) erq2 
     on erq2.id = erq.id 
    where rn > 7; 
+0

답변 해 주셔서 감사합니다. 그러나 나는 내 상황에서 'erq'이 무엇을 의미하는지 모른다. '[Err] 1051 - 알 수없는 테이블 'eqr2'가 있습니다. – Aaron