궁금 가입 변환하는 자체 하위 쿼리다음은 가입 자체에 자체 하위 쿼리를 변환 할 수있는 방법이 있다면 자체에 자체 하위 쿼리
SELECT a,
b
FROM c AS t1
WHERE (b IN (SELECT b
FROM c AS t2
WHERE (t1.b = b)
AND (t1.e <> e)))
궁금 가입 변환하는 자체 하위 쿼리다음은 가입 자체에 자체 하위 쿼리를 변환 할 수있는 방법이 있다면 자체에 자체 하위 쿼리
SELECT a,
b
FROM c AS t1
WHERE (b IN (SELECT b
FROM c AS t2
WHERE (t1.b = b)
AND (t1.e <> e)))
에게 있습니다 EXIST
아마 더 빠를 것이다 중복 찾으려면 :
SELECT a,b FROM c WHERE EXISTS(SELECT NULL FROM c c2 WHERE c2.b=c.b AND c2.e<>c.e)
당신이 가진 모든 레코드에 가입하려면 그것의 중복하지만 각각에 대해 하나의 레코드 만 얻을 :
select t1.a
, t1.b
, t1.e as t1e
, t2.e as t2e
from c as t1
inner join c as t2
on t1.b = t2.b
and t1.e > t2.e
이 e
으로
'IN'과'EXISTS'는 아마 같은 계획을 줄 것입니다. –
SELECT t1.a, t2.b
FROM c as t1
join c as t2 on t1.b=t2.b
WHERE t1.e <> t2.e
select t1.a
, t1.b
from c as t1
join c as t2
on t1.b = t2.b
and t1.e <> t2.e
는 것이 접근의 또 다른 방법은 기본 키입니다 (내가 >
대신 <>
의 사용했습니다 참고)를
SELECT a,
b
FROM (SELECT a,
b,
COUNT(*) OVER (PARTITION BY b) AS Cnt
FROM c) T1
WHERE Cnt > 1
하위 쿼리가 수행중인 작업은 무엇입니까? 그것은 당신이 그것을 없애 버릴 수있는 것 같습니다 ... – jle
그것은 테이블의 무언가가 같은 값을 가지고 있는지 확인합니다 –
그리고 e는 일들을 구별하는데 사용되는 기본 키입니다 –