2011-06-11 2 views
0

주위를 읽은 후 SQL (MySQL의 경우)이 열 제외를 지원하지 않음을 알았습니다. 내가 받아 들일 왔어요 동안 행동의이 종류를 달성하기 위해 어떤 점잖은 해결 방법이 있는지SELECT 문의 모호한 열 제외 (실제로 CREATE VIEW 문)

SELECT *, NOT excluded_column FROM table; /* shame it doesn't work */ 

어쨌든, 궁금하네요. 이유는, 나는 보기을 만들어 일부 테이블에서 정보를 통합합니다.

일부 사용자 데이터를 테이블 useruser_profile에 정규화했습니다. user은 사용자 조작에 중요한 데이터를 저장하고, user_profile은 중요하지 않은 데이터를 저장합니다. 응용 프로그램 요구 사항은 여전히 ​​실현되고 있으므로 열은 필요에 따라 user_profile에서 추가/제거되고 추가 테이블은 뷰에 포함될 줄 아래로 지원 될 수 있습니다.

보기를 만들 때 두 테이블 모두에 user_id이 있으므로 Error 1060: Duplicate Column Name이 표시됩니다.

지금, 나는 지금까지 가지고 올 한 솔루션은 기본적으로 :

user 테이블이 충분할 수있는 애플리케이션 라이프 사이클 ( 희망)를 통해 변경되지 것입니다 때문에
/* exclude user_id from user */ 
SELECT user.critical_field, user.other_critical_field, 
     user_profile.* 
FROM user 
LEFT JOIN user_profile 
ON user.user_id = user_profile.user_id; 

하지만, 좀 더 역동적 인 접근 방식이 존재한다면 나는 단지 궁금했다.

(표 이름은 내가 user은 종종 그 자체에 대한 명명 규칙의 가난한 선택을 알고, copypasta'd되지 않은, 내가 접두사를 사용합니다.) 일반적으로

+0

설명 할 수없는 * -1 *은 도움이되지 않습니다. 내 질문에 불명확하거나 가난한 선택을 제안하면 그 이유를 알고 싶습니다. – Dan

답변

1

, 내가 할 필드를 정의 할 것이다 추가로, 나는 그것을 확인거야 이제

SELECT user.critical_field, user.other_critical_field, 
     user_profile.User_Id, user_profile.MyOtherOfield 
FROM user 
LEFT JOIN user_profile 
ON user.user_id = user_profile.user_id; 

제대로 I 별칭 일 : 귀하의 예제를 사용하여 내보기

에 수

SELECT u.critical_field, u.other_critical_field, 
      up.User_Id, up.MyOtherOfield, u.KeyField AS userKey, up.KeyField as ProfileKey 
    FROM user as u 
    LEFT JOIN user_profile as up 
    ON u.user_id = up.user_id; 

이렇게하면 내보기가 무엇인지 알 수 있고 열의 이름이 지능적으로 지정되지만 기본 테이블 구조를 변경할 때 해당보기를 터치해야합니다.

+0

감사합니다 ** Stephen Wrighton **; 나는 그것이 사실 일 것이라고 생각했다. 테이블이 변경 될 때 내보기를 동기화하는 데 문제가 없지만 대안이 없다고 가정합니다. 나는 현재의 솔루션이 차선책이라고 생각한다. – Dan

+0

다른 대안을 찾지 못했지만 동시에 나는 보지 않았습니다. 주로 내가이 일을하는 방식을 좋아하기 때문에, 내가 통제권을 좋아하기 때문에. –

+0

좋은 소리입니다. 나는 이것이 내 선택 일 것이라고 믿는다. 주로 개발 목적으로 동적 대안을 원했고 배포를위한 열 특정보기 정의로 이동했습니다. 나는 처음에는 "옳은 일"을 할 수도 있습니다. – Dan