2013-08-20 2 views
0

나는 (약간 중복 예를 들어 콘텐츠를 용서) 다음과 같이 Access에서 설정 몇 테이블이 있습니다MS 액세스 - 저장된 ID를 기록하는 연결

Table 1: 
- ID 
- FirstName 
- SecondName 

Table 2: 
- ID 
- Details 
- PersonID -> Table 1[ID] 

Table 3: 
- ID 
- Group 
- PersonDetails -> Table 2[ID] 

표 1은 기록을 포함하고 검색하는 기본 테이블입니다 아니오 기타 정보. 예를 들어, 자동 번호 ID와 함께 다른 사람의 첫 번째 및 두 번째 이름을 저장할 수 있습니다.

표 2는 무엇보다도 표 1에 링크 된 필드를 포함하고 거기에 보유 된 레코드 중 하나의 ID를 저장하는 레코드를 포함합니다. 조회 마법사를 사용하면 표 1의 모든 필드를 활용할 수 있으며 표 2 필드에 표 1 레코드의 ID를 저장하고 폼의 콤보 상자에 첫 번째와 두 번째 이름을 표시하여보다 직관적 인 레코드를 선택할 수 있습니다.

표 3에서 표 2의 레코드 중 하나의 ID를 저장해야합니다. 그러나 표 1에서 관련 레코드의 첫 번째 및 두 번째 이름을 콤보 박스 형식으로 다시 표시하고 싶습니다. 이 ID는 표 2에 저장되어 있습니다. 예를 들어 표 2의 PersonDetails 필드를 활용하여 ID 번호를 콤보 상자에 넣을 수는 없습니다. 다음과 같은 작업을 수행해야합니다.

Access에서 조회 마법사와 관련이 있습니까? 아니면 쿼리 나 VBA를 조사해야합니까?

감사합니다. 콤보에 대한

+2

Access에서 조회 필드를 사용하지 않는 것이 좋습니다. 테이블 내부에서 사용자 인터페이스 디자인을하고 싶지는 않습니다. 편집, 추가/삭제 및 데이터보기를 위해 양식을 사용해야합니다. 여러 조인을 사용하여 SQL 쿼리를 통해 원하는 작업을 수행 할 수 있습니다. ComboBox를 사용하면 사용할 쿼리를 지정할 수 있습니다. – HK1

+0

감사합니다 - 내가 노력하고있어 함께 다음과 같은 조인 : 이 SELECT ClientProfile.ID, ClientProfile.ReferenceName는, Clients.Company, Pricing.FeePerHour ClientProfile로부터 좌 가격을 가입 ClientProfile.ClientID = Clients.ID 왼쪽에 클라이언트 가입 ON ClientProfile.PricePlanID = Pricing.ID; 그리고 액세스가 나에게 오류를 제공합니다 구문 오류가 쿼리 식 (누락 된 연산자) 'ClientProfile.ClientID = Clients.ID LEFT 가격 ON ClientProfile.PricePlanID = Pricing.I 가입'. – x6herbius

답변

0

귀하의 질문은 다음과 비슷한 모습이 될 것

SELECT cp.ID, cp.ReferenceName, c.Company, p.FeePerHour 
FROM (ClientProfile AS cp LEFT JOIN Clients AS c ON cp.ClientID = c.ID) 
LEFT JOIN Pricing AS p ON cp.PricePlanID = p.ID; 

쿼리의 주된 문제는 당신이 여러 조인이있을 때 필요한 괄호를 놓치고 있다는 것입니다. 다른 조인을했다면 두 번째 괄호 집합이 필요합니다.

나는 약간의 자유를 가져 와서 테이블 별칭을 사용했습니다. SQL을 간결하고 읽기 쉽게 만듭니다.

이 쿼리가 여전히 작동하지 않으면 외래 키 필드를 가입 필드로 사용하지 않고 "주 테이블"에 "하위 테이블"을 조인하려는 것이 원인 일 수 있습니다. 이것이 내 데이터베이스라면 SQL은 다음과 같이 보일 것입니다 :

SELECT cp.ClientProfileID, cp.ReferenceName, c.Company, p.FeePerHour 
FROM (ClientProfile AS cp LEFT JOIN Clients as C ON cp.ClientID = c.ClientID) 
LEFT JOIN Pricing AS p ON cp.ClientProfileID = p.ClientProfileID; 

개인적으로 저는 기본적으로 필드 이름으로 일반 ID를 사용하지 않습니다. 외래 키를 만들 때 나는 원래 테이블과 동일한 필드 이름을 사용합니다. 예외가 있습니다. 특히 동일한 테이블에 두 번 이상 다시 링크해야하는 경우가 있습니다. 부동산 속성을 추적하고 동일한 피겨 테이블에서 두 엔티티 (그러나 서로 다른) 인 구매자와 판매자가있는 경우를 생각해보십시오. 그런 다음 BuyerID W SellerID와 같은 이름을 지정해야하지만 궁극적으로 이들은 Person 테이블의 PersonID로 다시 링크됩니다.

그래서 여기에 내가 갈 테이블 디자인이 있습니다. Notice Group을 PriceGroup으로 변경했습니다. 프로그래밍 할 때 예약어는 SQL뿐만 아니라 모든 언어로 조심하십시오. 어떤 점에서 필드 그룹의 이름을 지정하면 "Group on Group"을 시도 할 것입니다.

Client: 
- ClientID 
- FirstName 
- SecondName 

ClientProfile: 
- ClientProfileID 
- Details 
- ClientID (Foreign Key to Client) 

Pricing: 
- PricingID 
- PriceGroup 
- ClientProfileID (Foreign Key to ClientProfile) 
+0

OK, 도움을 주셔서 감사합니다! – x6herbius

관련 문제