2014-01-16 3 views
20

나는 시간 동안 노력하고 많은 글을 읽을 수 있지만 난 아직이 요청 처리하는 방법을 알아낼 수 없습니다 :행을 선택

이 같은 테이블이 있습니다

+------+------+ 
|ARIDNR|LIEFNR| 
+------+------+ 
|1  |A  | 
+------+------+ 
|2  |A  | 
+------+------+ 
|3  |A  | 
+------+------+ 
|1  |B  | 
+------+------+ 
|2  |B  | 
+------+------+ 

다른 LIEFNR에서 두 번 이상 나타나는 ARIDNR을 선택하고 싶습니다.

출력은 뭔가를해야한다 :

+------+------+ 
|ARIDNR|LIEFNR| 
+------+------+ 
|1  |A  | 
+------+------+ 
|1  |B  | 
+------+------+ 
|2  |A  | 
+------+------+ 
|2  |B  | 
+------+------+ 

답변

26

이 그것을 할 에게서는 :

SELECT * 
FROM YourTable 
WHERE ARIDNR IN (
    SELECT ARIDNR 
    FROM YourTable 
    GROUP BY ARIDNR 
    HAVING COUNT(*) > 1 
) 
아이디어가 발생하는 ARIDNR 값이 레코드를 식별하기 위해 내부 쿼리를 사용하는 것입니다

데이터에서 1+ 시간을 계산 한 다음 해당 값 집합을 기반으로 동일한 테이블에서 모든 열을 가져옵니다.

+0

네,하지만 그는 다른 LIEFNR을 가진 사람들 만 원합니다. – Segfault

+1

큰 감사드립니다. 정확히 내가 찾는 것 같아. 나는 이것을 몇 분 안에 시도 할 것이다. –

+0

@Segfault 언어 문제라고 생각합니다. 그는 서로 다른 'LIEFNR' *을 말합니다. 실제로는 서로 다르다는 것이 아니라 말할 수있는 것처럼 * 당신이 가지고있는 모든 것들을 모두보고 싶습니다. – Yuck

8

동일한 테이블에 다시 가입하십시오. 일치하지 않는 행은 버려 지도록 내부 조인을 사용하십시오. 조인 된 집합에는 다른 LIEFNR이있는 테이블의 다른 행에 일치하는 ARIDNR이있는 행이 있습니다. ARIDNR이 최종 세트에 나타나게하십시오.

SELECT * FROM YourTable WHERE ARIDNR IN (
    SELECT a.ARIDNR FROM YourTable a 
    JOIN YourTable b on b.ARIDNR = a.ARIDNR AND b.LIEFNR <> a.LIEFNR 
) 
+0

나는 무엇을해야하는지 알지만 ARIDNR은 명확한 컬럼이 없다는 오류가 있습니다. –

+0

아, 맞아요, 제 편집 된 쿼리를 확인하십시오. 하위 쿼리에서 선택할 테이블을 지정해야합니다. – Segfault

+1

좋습니다. 그러나 이것은 내가 만든 예제가 아닌 모든 것을 선택합니다. –

8

시험해주세요. 나는 그것을 확인하고 그것은 작동하고 :

SELECT * 
FROM Table 
WHERE ARIDNR IN (
    SELECT ARIDNR 
    FROM Table 
    GROUP BY ARIDNR 
    HAVING COUNT(distinct LIEFNR) > 1 
) 
+0

여러분이 실제로 어떤 열도 아닌 특정 열의 차이를 찾기 때문에 이것이 받아 들여진 대답이되어야한다고 생각합니다. – Flugmango

0

당신은 단순히

SELECT * 
FROM test 
WHERE ARIDNR IN 
    (SELECT ARIDNR FROM test 
    GROUP BY ARIDNR 
    HAVING COUNT(*) > 1) 
GROUP BY ARIDNR, LIEFNR; 

감사하여 달성 할 수있다.

0

사용이

select * from (
SELECT ARIDNR,LIEFNR,row_number() over 
    (partition by ARIDNR order by ARIDNR) as RowNum) a 
where a.RowNum >1 
0
$sql="SELECT * FROM TABLE_NAME WHERE item_id=".$item_id; 

$query=mysql_query($sql); 

while($myrow=mysql_fetch_array($query)) { 

echo print_r($myrow,1); 


} 
+1

안녕하세요, 코드를 이해하는 데 도움이되는 코드와 함께 약간의 설명을 추가하십시오. 코드 만 응답은 눈살을 찌푸리게됩니다. –

0

이 아직 나는 또한 때때로 이것에 대한 해결책이 필요하다는 것을 발견 오래된 질문입니다.
1 | | B

1 : 다음과 같은 결과

DECLARE @T TABLE (ARIDNR INT, LIEFNR varchar(5)) --table variable for loading sample data 
INSERT INTO @T (ARIDNR, LIEFNR) VALUES (1,'A'),(2,'A'),(3,'A'),(1,'B'),(2,'B'); --add your sample data to it 
WITH duplicates AS --the CTE portion to find the duplicates 
(
    SELECT ARIDNR FROM @T GROUP BY ARIDNR HAVING COUNT(*) > 1 
) 
SELECT t.* FROM @T t --shows results from main table 
INNER JOIN duplicates d on t.ARIDNR = d.ARIDNR --where the main table can be joined to the duplicates CTE 

가 나타냅니다 : 이전의 대답은 모두 좋은 예를 들어, 난 그냥 개인적으로 CTE를 사용하여 선호, 잘 작동
2 | B
2 |