라는 열이있는 테이블이 있습니다 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
;