열에 둘 이상의 레코드에서 동일한 데이터가 포함 된 행을 선택하십시오. from articles

라는 열이있는 테이블이 있습니다 article_title. 테이블 이름이이라고 가정 해 봅시다 articles. article_title둘 이상의 레코드에서 데이터가 동일한 레코드를 찾아야합니다 .

내가 가진 것은 다음과 같습니다.

select a.* 
from articles a 
where a.article_title = (select article_title 
                         from articles 
                         where article_title = a.article_title 
                         AND a.id <> articles.id)


답변

HAVING은 훌륭한 집계 필터입니다. ( http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html ) 예를 들어, 발생 횟수 이상으로 article_titles를 선택하십시오.

SELECT count(*), article_title
FROM articles
GROUP BY article_title
HAVING COUNT(*) > 1;

SELECT 및 GROUP BY 절에 열을 추가하면 여러 열의 복합 키를 기반으로 중복 항목을 찾을 수 있습니다.


답변

이 쿼리로 문제를 해결할 수 있습니다.

SELECT *
FROM article
WHERE article_title IN (SELECT *
                        FROM (SELECT article_title
                              FROM article
                              GROUP BY article_title
                              HAVING COUNT(article_title) > 1)
                        AS a);

답변

article_title이라는 열이있는 테이블이 있습니다. 테이블 이름이 기사라고 가정 해 봅시다. article_title 데이터가 둘 이상의 레코드에서 동일한 레코드를 찾아야합니다.

나에게 들리는 것처럼 article_title중복이 있기 때문에 기반으로 레코드를 찾으려면 ID가 필요합니다.

GROUP BY를 사용한 기본 MIN / MAX (2 번 이상 중복되면 id가 누락 됨)

SELECT
  MIN(id) -- for FIFO id's (first id by duplicate)
, MAX(id) -- for LIFO id's (last id by duplicate)
, article_title
, COUNT(*)
FROM
 articles
WHERE -- Maybe to filter out '' or IS NOT NULL
 article_title != '' AND article_title IS NOT NULL
GROUP BY
 article_title ASC
HAVING
 COUNT(*) >= 2
;

또는 비정규 화로 돌아가서 LIFO ID (이전 ID는 중복)에 대한 CSV를 생성하지만 모든 ID는 여기에 있습니다.

SELECT
  GROUP_CONCAT(id ORDER BY ASC SEPARATOR ',') -- change to DESC if want the last record first
, article_title
, COUNT(*)
FROM
 articles
GROUP BY
 article_title ASC
HAVING
 COUNT(*) >= 2
;

답변