저는 현재 현재 학교에서 데이터베이스를 배우고 있습니다.하지만 유감스럽게도 선생님은 정말로 도움이나 질문에 대답하는 것을 전혀 즐기지 않습니다. 저는 현재 현재 몇 가지 오라클 DB 연습을하고 있습니다. 한 가지 질문에 대해 생각해 보았습니다. 해결 방법을 모르겠습니다.중복 제거 JOIN
표 1 학생
ID FAMILY NAME FIRST NAME BIRTH DATE IM_DATE FACULTY
4711 Lehmann Heini 13.03.89 01.09.08 I
4712 Huber Sven 14.07.89 01.09.08 IWI
4713 Meier Swantje 11.04.88 01.03.09 IWI
4714 Tunix Ole 15.03.88 01.03.09 IWI
4715 Kannix Peter 02.11.89 01.03.09 IWI
4716 Weissnix Axel 15.12.88 01.03.09 IWI
표 2 : LN
ID FKBEZ VNR P_DATE GRADE
0,123,516
4711 DB1 1 02.02.08 4,7
4711 DB1 2 07.07.09 5
4711 PR1 1 28.01.09 3
4712 DB1 1 02.02.08 3,7
4713 DB1 1 02.02.08 1,7
4713 DB2 1 02.02.09 3,7
4714 PR1 1 28.01.09 2
4715 DB1 1 02.02.08 5
4711 DB2 1 14.07.09 1,3
4711 PR2 1 30.06.09 2,3
자, 다음은 질문입니다.
1 : 중복 행을 초래할 SQL 쿼리 (JOIN)를 생성하십시오. 질문 2 : 질문을 Q1에서 변경하면 중복 된 내용이 표시되지 않습니다.
여기 내 첫 번째 '문제'는 복제본의 정의가 무엇인지 100 % 확신하지 못한다는 것입니다. SELECT 명령에서 선택하지 않은 경우에도 모든 열에 100 % 동일한 내용의 중복 행이 있습니까?
예 : 말 내가 쿼리를 만든 내가 열 '가족 이름'내 SELECT 명령 '나이'내 결과를 선택한는 다음과 같습니다
Family Name Age
Miller 20
Miller 20
하지만 실제로는 서로 다른 두 명으로 이름이 다릅니다. 따라서 첫 번째 이름을 선택하지 않았기 때문에이를 표시하지 않거나 SELECT를 통해 선택한 항목이 중요하지 않으며 중복 행이 100 % 동일 할 경우에만 중복 항목으로 한정되므로 중복 항목으로 한정됩니까?
제 질문으로 돌아 가세요. 내가처럼 보이는 쿼리를 가입하는 간단한 (INNER)를 선택한 경우 Q1 이
학생들 S FROM SELECT S.ID, S.Family_Name, S.First_Name, LN.FKBEZ 는 S. ON LN 가입 ID = LN.ID는
FAMILY NAME FIRST NAME FKBEZ (GRADE)
Lehmann Heini DB1 4,7
Lehmann Heini DB1 5
Lehmann Heini PR1 3
Huber Sven DB1 3,7
Meier Swantje DB1 1,7
Meier Swantje DB2 3,7
Tunix Ole PR1 2
Kannix Peter DB1 5
Lehmann Heini DB2 1,3
Lehmann Heini PR2 2,3
이 결과이다. 내 질문에 '학년'을 선택하지 않았지만 목록을 작성해 두었으므로 내 질문을 조금 더 잘 이해할 수 있습니다. 이제 쿼리에서 'GRADE'를 선택하지 않았으므로 행 1 + 2가 중복 될 것으로 생각합니다. 열이 모두 동일하기 때문입니다. 그런 다음 Q2로 이동하여 똑같은 쿼리를 사용했습니다. NATURAL JOIN을 사용하여 이번에 만 (모든 중복 행을 제거하므로) 정확한 결과를 얻었습니다.
그래서 지금 내 결론은 행이 그들 만이 모든 볼 수 및 '보이지 않는' 칼럼에 100 % 동일한 있다면 중복되는 것으로 간주한다는 것이다. 하지만 Q1 + Q2를 어떻게 풀어야할지 모르기 때문에 실제로 완전히 엉망입니다.
DISTINCT 또는 GROUP BY를 사용하여 이러한 질문을 해결하지 않아야한다는 것을 알아야합니다. JOINS, INTERSECT, UNION 및 MINUS 만 (다른 종류).
나는이 게시물을 작성하는데 많은 시간과 노력을 쏟았 음을 알 수 있습니다. 여러분이이 게시물을 도와 주시면 대단히 감사하겠습니다.
감사합니다.
질문에 대한 이해를 바탕으로 수업이 도움이 될지 잘 모르겠습니다. –
약간의 설명을 위해 강사를 괴롭힐 필요가 있다고 생각합니다. 최소한 열을 포함/제외하거나 조인에 열을 추가하는 첫 번째 "대답"에 대해 물어볼 수 있습니다. 중복되지 않은 행을 유지해야합니까? 'UNION'은 당신을 위해서'DISTINCT'를 수행 할 것입니다. 그래서 그것은 일종의 부정 행위입니다. 명시 적으로 GROUP BY 절을 추가하지 않고 최대/최소값을 얻을 수 있습니다 (부정 행위도 가능). 'INTERSECT' /'MINUS'는 세트에서 작동하기 때문에, 처음부터 중복 제거하지 않는 한 _all_ 행을 유용하게 유지/제거 할 것입니다. 'NATURAL JOIN' ='JOIN'은 조건이 있습니다. –
... 나는 바보입니다. LEFT JOIN (모든 RDBMS에서 작동)을 사용하여이를 수행하는 방법을 잊어 버렸습니다. 중복을 찾거나 제거하는 방법은 [SO-1 그룹 당]에서 찾아보십시오. 하지만 직관적이지는 않습니다. 사람들은 보통 사람들에게 지적해야합니다. –