错误1054未知列在'on子句' - 内部连接为视图

问题描述:

对不起,我是newbee,无法一次性在漂亮的代码列表中完成everyhing。我正在(让)​​在网站上启动我的数据库的前期阶段,但在此之前,我需要使用内部联接创建(全部)视图。我在'on clause'中收到臭名昭着的1054未知列的消息。这是实际的MySQL脚本。有人能帮助我成功完成脚本吗?围绕脚本中的这段代码,它会搜索(在FROM SYNTAX中的星星之间的):INNER JOIN zorgaanbieder AS zorgaanbieder_1 ON(zorgverlener.Zorgaanbieder_ID = zorgaanbieder_1.Zorgaanbieder_ID)。请参阅下面的代码错误1054未知列在'on子句' - 内部连接为视图

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并给出结果。也许正如你可以看到我有两个内部联接(表zorgaanbieder和关注)与别名(_1),因为否则该函数会给出另一个错误(不唯一)。它是由我的同事告知的(他是我工作的医院的查询构建者)。 ON后面的'(...)'是我的工作;-)是MySQL用户指南中的一种状态。希望你能找出答案并乐意得到如此快速的答复。提前致谢 ! – Evert

+0

请阅读并按照[mcve]进行操作。你广泛的谷歌搜索出现了什么? – philipxy

调试建议:从小开始测试,然后通过小增量增长并重新测试。

我相信你的问题是连接的不正确的序列,而不是不正确的列引用。例如

## 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需要超出合约等等。

相信乔伊斯的更正确的顺序如下,但也有2加入我解决不了:

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_Already。上面的回答是对你的评论,但是添加了评论错误。我相信接近解决与编码。我将问题行(表diagnosebereik和dbc_diagnosebereik)合并到表'dbc_diagnosen'中。因此,您的声明中的代码是:“## problems ... INNER JOIN dbc_diagnosen ON diagnosen.Diagnose_ID = dbc_diagnosen。Diagnose_ID INNER JOIN dbc ON dbc_diagnosen.DBC_koppel = dbc.DBC_koppel“然后......”INNER JOIN diagnosen ON dbc_diagnosen.Diagnose_ID = diagnosen.Diagnose_ID“是我碰到另一个错误的地方1054 unknown column diagnosen.Diagnose_ID。What's next ? – Evert

+0

我注意到,在你的语句中完全相同的表INNER JOIN zorgproducten_declaratie被命名为两次,我删除了最下面的在MySql中应用,我喜欢更新我在此时的FROM语句中的代码,但不知道如何(把更少的字符留给代码作为注释) – Evert

+0

我的答案的目的是告诉你为什么你遇到了问题并提出解决方法。只有你可以测试任何版本的查询。请记住,调试时从小开始并以小增量添加。 –