2010-07-23 4 views
1

Min() 또는 Max() 같은 함수가 레코드 무결성을 손상시킬 수 있습니까? 나는 최근에 만들어진 쿼리의 경우를 보자min() 또는 max()와 같은 SQL 함수는 레코드 무결성을 무효화 할 수 있습니다.

이 는, MIN (전화), MIN (chargeid가), MIN 계정 BY Import1에 그룹 (locationid), 전화

내가 혼합하고 기회가 SELECT 계정이

내 필드 데이터를 의도하지 않게 새 레코드로? Min을 Max로 변경하면 어떻게됩니까? 내가 선택한 경우 레코드 무결성을 파괴 할 수 있습니까?

덕분에, 도노반

답변

1

내가 그의 질문은 다음과 같은 데이터가 있다면

Account Phone  ChargeId LocationId 
1  111-1111 6   8 
2  111-1111 7   7 
2  111-1111 8   6 

존재가 반환 것입니다 믿으 2, 111-1111, 7, 6 (chargeId (2)의 7 개와 LocationId (3)의 6 개).

당신이 묻는다면 그렇다. 그것은 당신의 결과를 망칠거야.

+0

이것은 이전 질문에서 ROW_NUMBER()를 사용하여 설정 한 기본 키를 사용하려고했던 이유입니다. IDENTITY 열이 지정된 새 테이블로 데이터를 푸시 할 수 있습니까? –

+0

crud. 그것이 내가 두려워했던 것입니다. – Donovan

+0

예. 필요한 경우 할 수 있습니다. 행 번호를 키로 포함하도록 임시로 테이블을 수정할 수 있습니다. 쿼리에 포함시킬 수는 없지만 select 문을 실행하기 전에 테이블에 고유 한 키가있는 위치로 테이블을 가져올 수 있습니다. – Donovan

7

당신은 실제로 쿼리에서 데이터를 변경하지 않습니다, 당신은 단지 선택하거나보고 있습니다.

업데이트, INSERT 또는 DELETE를 수행하거나 저장된 proc를 호출하지 않는 한 데이터를 변경하지 않습니다.

+0

사실이 경우 선택이 완전히 새로운 데이터 세트로 바뀌고 있습니다. 시각 여우를 사용할 때 select 문을 완전히 새로운 테이블로 바꿀 수 있습니다. 그래서 나는 우려했습니다. – Donovan

3

레코드 무결성을 파괴한다는 것이 무엇인지 모르겠지만 MIN 또는 MAX 함수를 호출해도 문제가 없습니다. 이것은 아주 일반적인 종류의 쿼리입니다.

결과 세트의 한 행에있는 모든 값이 원본 테이블의 같은 행에서 나왔다고 가정하면 안됩니다. 값은 다른 행에서 가져올 수 있습니다.

은 "10"첫 번째 행과 "20"에서 유래
 
account phone MIN(chargeid) MIN(locationid) 
123  456 10   20 

가에서 온다 :

 
account phone chargeid locationid 
123  456 10  30 
123  456 40  20 

그런 다음 결과이 될 것입니다 : 예를 들어, 테이블의 데이터는이 경우 두 번째 행.

또한 휴대 전화에서 MIN을 사용하는 것은 불필요한 것처럼 보입니다. 그것이하여 그룹의 일부로서 당신은 단지이 필드를 선택해야합니다 :

SELECT account, phone, MIN(chargeid), MIN(locationid) 
FROM import1 
GROUP BY account, phone 
+0

필자는 하나 이상의 행에있는 필드를 해당 선택 항목과 혼합하지 않았는지 확인하려고했습니다. 나는 그 진술에 기초한 새로운 테이블을 만들고 있는데, 그것이 만든 데이터의 정확한 표현인지 확인하고 싶었습니다. – Donovan

+0

Min (전화)에 대한 귀하의 권리는 그룹핑에 포함되지 않았고 내가 그것을 포함 시켰을 때 나는 MIN을 제거하지 않았다. – Donovan

+0

@Donovan : 둘 이상의 행에서 필드를 혼합 할 수 있습니다. 내가 예를 든 나의 업데이트 된 답변을 보라. –