2014-11-06 2 views
0

에 가입 'afspraken'내부 메신저가 오류로 갇히지 가입 내부 일을하려고 두 테이블 메신저로

다음

내가 노력하고 무엇 :

SELECT accounts.werknemer_id, accounts.voornaam, accounts.achternaam, klanten.klant_id, klanten.voornaam, klanten.achternaam 
FROM accounts, klanten 
JOIN afspraken ON afspraken.werknemer_id = afspraken.werknemer_id JOIN afspraken ON afspraken.klant_id = afspraken.klant_id 

나는 무엇이 잘못 될지 궁금해하고 있습니다. 나는 Google에 있었지만 해결책을 찾을 수 없었습니다. 포핸드

+0

는 쉼표 테이블 표기법을 혼합 할 수 없습니다 및 내부 조인 구문. – xQbert

+0

더하기이 테이블이 같은 열에 합류하는 것 같습니다. 이것이 맞습니까? 일반적으로 내부 조인의 경우 table1.id = table2를 수행합니다.table1id – Kirby

+0

'SELECT'에서'accounts'와'klanten' 테이블 만 참조합니다. 'afspraken '테이블은 어디서 들어 왔습니까? –

답변

1

두 테이블의 내부 조인을 사용하는 경우 내부 조인의 조건은 두 테이블에 모두있는 동일한 필드 여야합니다. 또한 선택한 필드는 하나의 테이블이나 다른 테이블에 있어야하며 동일한 테이블의 동일한 필드를 기반으로하는 내부 조인에 조건을 지정할 수는 없습니다. afspraken.werknemer_id = afspraken.werknemer_id과 같음 afspraken.klant_id = afspraken.klant_id은 오류의 원인입니다.

난 당신이 werknemer_idklant_id 필드와 테이블 afspraken을 통해 공통 필드 두 테이블 accountsklanten을 가입하려는 생각, 그래서 다음과 같이 될 것이다 :

SELECT accounts.werknemer_id, 
accounts.voornaam, 
accounts.achternaam, 
klanten.klant_id, 
klanten.voornaam, 
klanten.achternaam 
FROM accounts 
INNER JOIN afspraken ON accounts.werknemer_id = afspraken.werknemer_id 
INNER JOIN klanten ON afspraken.klant_id = klanten.klant_id 
0

에서

덕분에 worrysome있는이 쿼리의 여러 부분이 있습니다 : 내부가 조인 구문을 대

  1. 쉼표 조인 구문을
  2. 없음을 (당신이 모두를 할 수 없어, 1 선택) 같은 이름의 두 테이블을 조인 할 때 테이블 별명. 컴파일러는 무엇을 해야할지 알 수 없습니다.
  3. 테이블 간의 관계를 식별 할 수 없으므로 반환하려는 데이터가 수행하려는 작업을 수행하지 못할 가능성이 높습니다.
  4. afspraken이 쿼리에 추가되었지만이 작업의 목적을 선택하지 않았습니다.
  5. 일반 영어로 필요한 것을 설명하십시오. (샘플 데이터 및 원하는 결과 표시)

.

SELECT accounts.werknemer_id, accounts.voornaam, accounts.achternaam, klanten.klant_id, klanten.voornaam, klanten.achternaam 
FROM accounts, klanten <-- This line is the problem 
JOIN afspraken ON afspraken.werknemer_id = afspraken.werknemer_id <--or these two are (1) 
JOIN afspraken ON afspraken.klant_id = afspraken.klant_id <--(2) 

는 ... 우리가 계정 을 klanten과 관련이 왜 당신이 당신과 같은 조인 구문상의와 절을 사용할 수있을 때 afspraken 조인을해야하는지 알아야 해결하기 위해

INNER JOIN afspraken 
    ON afspraken.werknemer_id = afspraken.werknemer_id <--or these two are (1) 
AND afspraken.klant_id = afspraken.klant_id <--(2) 

또한 afspraken의 별명을 지정하지 마십시오. 이는 또한 시스템이 링크 할 조인을 모르기 때문에 문제를 일으킬 수 있습니다. 그러니

...

SELECT A.werknemer_id, A.voornaam, A.achternaam, K.klant_id, K.voornaam, K.achternaam 
FROM accounts A, klanten K, afspraken AF, afspraken AF2 
WHERE AF.werknemer_id = AF2.werknemer_id 
AND AF.klant_id = AF2.klant_id 

비록 다시 계정 klaten 또는

SELECT A.werknemer_id, A.voornaam, A.achternaam, K.klant_id, K.voornaam, K.achternaam 
FROM accounts A 
CROSS JOIN klanten K 
CROSS JOIN afspraken AF, 
INNER JOIN afspraken AF2 
    ON AF.werknemer_id = AF2.werknemer_id 
AND AF.klant_id = AF2.klant_id 

관련이 있지만 가능성이 각 테이블은 어떤 관련이 있는지 이해가 안 나는대로 엉망 관계가 어떻게 귀하의 예제에서 서로 테이블에.