2017-10-13 5 views
-1

죄송합니다, 저는 여기 뉴비입니다. 한 번에 아름다운 코드 목록에서 모든 것을 얻을 수 없습니다. 나는 웹 사이트에서 내 데이터베이스를 시작하기위한 사전 단계에 있지만 내부 조인을 사용하여 전체보기를 만들어야한다. 그리고 'on clause'에 불명확 한 1054 개의 알려지지 않은 컬럼에 대한 메시지가 나옵니다. 다음은 실제 MySQL 스크립트입니다. 누군가가 스크립트의 성공을 도와 줄 수 있습니까? 스크립트에서이 코드 주위에 (의 별 사이에 구문 SYNTAX) 붙어 있습니다. 내부 조인 zorgaanbieder 그대로 zorgaanbieder_1 켜기 (zorgverlener.Zorgaanbieder_ID = zorgaanbieder_1.Zorgaanbieder_ID). 아래의 코드를 참조하십시오.오류 'on clause'의 미확인 컬럼 - 내부 조인보기

CREATE VIEW `fetch_data` AS 

SELECT 
    zorgactiviteiten.ZA_code, 
    zorgactiviteiten.ZA_naam, 
    zorgactiviteiten.ZA_omschr_consument, 
    zorgprofielklasse.ZPK_oms, 
    behandelingen.Behandeling_criteria, 
    aanspraak.Aanspraak_omschr, 
    aanspraak.Aanspraak_machtiging, 
    cluster.Cluster_naam, 
    diagnosen.Diagnose_code, 
    diagnosen.Diagnose_naam, 
    diagnosen.Diagnose_groep, 
    diagnosen.Diagnose_hoofdstuk, 
    specialisme.Specialisme_naam, 
    zorgproducten.ZP_code, 
    zorgproducten.ZP_naam, 
    zorgproducten.ZP_omschr_consument, 
    zorgproductgroepen.ZPG_naam, 
    declaratie.Declaratie_code, 
    declaratie.Declaratie_zorg, 
    contractueel.Contractueel_uitleg, 
    contract.Contract_zorg, 
    contract.Contract_verzekerd, 
    contract.Contract_uitsluiting, 
    zorgverzekeraar.Zorgverzekeraar_verzekeraar, 
    zorgverzekeraar.Zorgverzekering_verzekering, 
    zorgverzekeraar.Zorgverzekering_soort, 
    zorgverzekeraar.Zorgverzekering_zorgkeuze, 
    concern.Concern_inkoop, 
    concern.Concern_label, 
    zorgverlener.Zorgverlener_plaats, 
    zorgverlener.Zorgverlener_regio, 
    zorgverlener.Zorgverlener_soort, 
    zorgaanbieder.Zorgaanbieder_informatie, 
    zorgaanbieder.Zorgaanbieder_website, 
    zorgaanbieder.Zorgaanbieder_reviews, 
    zorgaanbieder.Zorgaanbieder_rapport, 
    zorgaanbieder.Zorgaanbieder_oordeel, 
    zorgaanbieder.Zorgaanbieder_prijslijst, 
    prijslijst.Prijslijst_tarief, 
    prijslijst.Prijslijst_actie, 
    prijslijst.Prijslijst_soort, 
    prijslijst.Prijslijst_jaar 
FROM 
    concern_zorgaanbieder_prijslijst 
INNER JOIN 
    prijslijst ON (concern_zorgaanbieder_prijslijst.Prijslijst_ID = prijslijst.Prijslijst_ID) 
INNER JOIN 
    concern ON (concern_zorgaanbieder_prijslijst.Concern_ID = concern.Concern_ID)  
INNER JOIN 
    zorgaanbieder ON (concern_zorgaanbieder_prijslijst.Zorgaanbieder_ID = zorgaanbieder.Zorgaanbieder_ID) 
INNER JOIN 
    zorgaanbieder AS zorgaanbieder_1 ON (zorgverlener.Zorgaanbieder_ID = zorgaanbieder_1.Zorgaanbieder_ID) 
INNER JOIN 
    zorgverlener ON (contract.Zorgverlener_koppel = zorgverlener.Zorgverlener_ID) 
INNER JOIN 
    concern AS concern_1 ON (zorgverzekeraar.Concern_ID = concern_1.Concern_ID) 
INNER JOIN 
    zorgverzekeraar ON (contract.Zorgverzekeraar_koppel = zorgverzekeraar.Zorgverzekeraar_ID) 
INNER JOIN 
    contract ON (contractueel_contract.Contract_ID = contract.Contract_ID) 
INNER JOIN 
    contractueel_contract ON (contractueel.Contractueel_ID = contractueel_contract.Contract_ID) 
INNER JOIN 
    contractueel ON (contractueel_decaratie.Contractueel_ID = contractueel.Contractueel_ID) 
INNER JOIN 
    contractueel_decaratie ON (declaratie.Declaratie_code = contractueel_decaratie.Declaratie_code) 
INNER JOIN 
    declaratie ON (zorgproducten_declaratie.Declaratie_code = declaratie.Declaratie_code) 
INNER JOIN 
    zorgproducten_declaratie ON (zorgproducten.ZP_code = zorgproducten_declaratie.ZP_code) 
INNER JOIN 
    zorgproductgroepen ON (zorgproducten.ZPG_code = zorgproductgroepen.ZPG_code) 
INNER JOIN 
    zorgproducten ON (dbc.ZP_code = zorgproducten.ZP_code) 
INNER JOIN 
    specialisme ON (diagnosen.Specialisme_code = specialisme.Specialisme_code) 
INNER JOIN 
    diagnosen ON (diagnosebereik.Diagnose_ID = diagnosen.Diagnose_ID) 
INNER JOIN 
    diagnosebereik ON (dbc_diagnosebereik.Diagnosebereik_naam = diagnosebereik.Diagnosebereik_naam) 
INNER JOIN 
    dbc_diagnosebereik ON (diagnosebereik.Diagnosebereik_naam = dbc_diagnosebereik.Diagnosebereik_naam) 
INNER JOIN 
    dbc ON (dbc_diagnosebereik.DBC_koppel = dbc.DBC_koppel) 
INNER JOIN 
    behandelingen ON (dbc.DBC_koppel = behandelingen.DBC_koppel) 
INNER JOIN 
    cluster ON (behandelingen.Cluster_ID = cluster.Cluster_ID) 
INNER JOIN 
    aanspraak ON (behandelingen.Aanspraak_code = aanspraak.Aanspraak_code) 
INNER JOIN 
    zorgactiviteit_behandelingen ON (behandelingen.Behandeling_naam = zorgactiviteit_behandelingen.Behandeling_naam) 
INNER JOIN 
    zorgactiviteiten ON (zorgactiviteit_behandelingen.ZA_code = zorgactiviteiten.ZA_code) 
INNER JOIN 
    zorgprofielklasse ON (zorgactiviteiten.ZPK_code = zorgprofielklasse.ZPK_code) 
+0

당신이 zorgverlener 테이블에 Zorgaanbieder_ID라는 이름의 열이 있음을 확인할 수 있습니다하세요? –

+0

MySQL에서 성명서를 보았습니다. SELECT Zorgaanbieder_ID FROM zorgverlener 그리고 결과를 제공합니다. 어쩌면 내가 알 수 있듯이 별칭 (_1)을 가진 두 개의 내부 조인 (테이블 zorgaanbieder 및 우려)이 있습니다. 그 이유는이 함수가 다른 오류 (고유하지 않은)를 부여하기 때문입니다. 그것은 내 동료 (그는 내가 일하는 병원의 질의 작성자)에 의해 조언을 받았다. ON의 배후에있는 '(...)'은 MySQL 사용자 가이드에 따른 주 (stategies) 중 하나였습니다. 당신이 그것을 밖으로 날카롭게 할 수 있고, 그런 빠른 대답을 가지고 있기 때문에 기쁘다. 미리 감사드립니다! – Evert

+0

[mcve]를 (를) 읽고 행동하십시오. 너의 광대 한 인터넷 검색은 무엇을 찾았습니까? – philipxy

답변

2

디버깅 조언 : 작은 것으로 시작한 다음 작은 증분으로 다시 성장시키고 다시 테스트하십시오.

나는 잘못된 열 참조가 아닌 조인의 올바르지 않은 시퀀스라고 생각합니다. 예 : 다음은

## this will fail 
select a.* from a 
join c on b.id = c.id ## c attempts to join to b = incorrect sequence of joins 
join b on a.id = b.id 

, 테이블 zorgverlener 시도 contract에 가입하지만 아직 가입하지 않았습니다.

SELECT 
     czp.* 
FROM concern_zorgaanbieder_prijslijst as czp 
... 
INNER JOIN zorgverlener ON (contract.Zorgverlener_koppel = zorgverlener.Zorgverlener_ID) 
... 
INNER JOIN contract ON (contractueel_contract.Contract_ID = contract.Contract_ID) 

다른 팁 :

  1. 수행 사용 테이블 별칭
  2. 는 조인의 문제는 순서를 변경 해결하려면 불필요한 괄호

를 사용하지 마십시오 :

SELECT 
     czp.* 
FROM concern_zorgaanbieder_prijslijst as czp 
... 
INNER JOIN contract AS C ON contractueel_contract.Contract_ID = contract.Contract_ID 
... 
INNER JOIN zorgverlener ON c.Zorgverlener_koppel = zorgverlener.Zorgverlener_ID 

지금 우리는 contractueel_contract이 계약보다 위에 갈 필요가 있다는 것을 알기 때문에 그것에갑니다.

나는 다음과 같이 jois의보다 올바른 순서는 생각하지만,이 내가 해결할 수없는 조인이 있습니다 :

SELECT 
     czp.* 
FROM concern_zorgaanbieder_prijslijst AS czp 
INNER JOIN prijslijst ON czp.Prijslijst_ID = prijslijst.Prijslijst_ID 
INNER JOIN concern ON czp.Concern_ID = concern.Concern_ID 

## problems in the next 2 lines, seem to be recursve 
INNER JOIN diagnosebereik ON dbc_diagnosebereik.Diagnosebereik_naam = diagnosebereik.Diagnosebereik_naam 
INNER JOIN dbc_diagnosebereik ON diagnosebereik.Diagnosebereik_naam = dbc_diagnosebereik.Diagnosebereik_naam 

INNER JOIN dbc ON dbc_diagnosebereik.DBC_koppel = dbc.DBC_koppel 
INNER JOIN zorgproducten ON dbc.ZP_code = zorgproducten.ZP_code 
INNER JOIN zorgproducten_declaratie ON zorgproducten.ZP_code = zorgproducten_declaratie.ZP_code 
INNER JOIN declaratie ON zorgproducten_declaratie.Declaratie_code = declaratie.Declaratie_code 
INNER JOIN contractueel_decaratie ON declaratie.Declaratie_code = contractueel_decaratie.Declaratie_code 
INNER JOIN contractueel ON contractueel_decaratie.Contractueel_ID = contractueel.Contractueel_ID 
INNER JOIN contractueel_contract ON contractueel.Contractueel_ID = contractueel_contract.Contract_ID 
INNER JOIN contract ON contractueel_contract.Contract_ID = contract.Contract_ID 
INNER JOIN zorgverlener ON contract.Zorgverlener_koppel = zorgverlener.Zorgverlener_ID 
INNER JOIN zorgaanbieder ON czp.Zorgaanbieder_ID = zorgaanbieder.Zorgaanbieder_ID 
INNER JOIN zorgaanbieder AS zorgaanbieder_1 ON zorgverlener.Zorgaanbieder_ID = zorgaanbieder_1.Zorgaanbieder_ID 
INNER JOIN zorgverzekeraar ON contract.Zorgverzekeraar_koppel = zorgverzekeraar.Zorgverzekeraar_ID 
INNER JOIN concern AS concern_1 ON zorgverzekeraar.Concern_ID = concern_1.Concern_ID 
INNER JOIN zorgproducten_declaratie ON zorgproducten.ZP_code = zorgproducten_declaratie.ZP_code 
INNER JOIN zorgproductgroepen ON zorgproducten.ZPG_code = zorgproductgroepen.ZPG_code 
INNER JOIN diagnosen ON diagnosebereik.Diagnose_ID = diagnosen.Diagnose_ID 
INNER JOIN specialisme ON diagnosen.Specialisme_code = specialisme.Specialisme_code 
INNER JOIN behandelingen ON dbc.DBC_koppel = behandelingen.DBC_koppel 
INNER JOIN cluster ON behandelingen.Cluster_ID = cluster.Cluster_ID 
INNER JOIN aanspraak ON behandelingen.Aanspraak_code = aanspraak.Aanspraak_code 
INNER JOIN zorgactiviteit_behandelingen ON behandelingen.Behandeling_naam = zorgactiviteit_behandelingen.Behandeling_naam 
INNER JOIN zorgactiviteiten ON zorgactiviteit_behandelingen.ZA_code = zorgactiviteiten.ZA_code 
INNER JOIN zorgprofielklasse ON zorgactiviteiten.ZPK_code = zorgprofielklasse.ZPK_code 
+0

죄송합니다. Used_By_ 이미 있습니다. 위의 답변은 당신에게 코멘트로 언급되었지만 잘못된 설명을 추가했습니다. 나는 코딩으로 해결할 수 있다고 생각한다. 나는 'dbc_diagnosen'테이블에 문제 선 (diagnosebereik 및 dbc_diagnosebereik 테이블)을 병합했습니다. "## problems ... INNER JOIN dbc_diagnosen ON diagnostics.Diagnose_ID = dbc_diagnosen.Diagnose_ID INNER JOIN dbc ON dbc_diagnosen.DBC_koppel = dbc.DBC_koppel "나중에 ..."INNER JOIN은 ON dbc_diagnosen을 진단합니다 .Diagnose_ID = diagnostics.Diagnose_ID "는 다른 오류 1054 알 수없는 열을 진단합니다 .Diagnose_ID입니다. 다음은 무엇입니까? ? – Evert

+0

귀하의 진술에있는 동일한 테이블 INNER JOIN zorgproducten_declaratie의 이름이 두 번 지정되어 있음을 발견했습니다. MySql에 적용하기 위해 가장 아래의 항목을 삭제했습니다.이 순간에 가지고있는 FROM 문에서 코드를 업데이트하고 싶지만 알지 못합니다 how (적은 문자로 코드를 주석으로 남김) – Evert

+0

내 대답의 의도는 문제가 발생한 이유와 문제를 해결하는 방법을 제시하는 것입니다 .Ber만이 모든 버전의 쿼리를 테스트 할 수 있습니다. 디버깅하는 동안 작게 시작하고 작은 증분을 추가하는 것을 기억하십시오. –