Mysql -关联表- on子句中的未知列


Mysql - associative table - Unknown column in on clause

下面的查询总是返回#1054 -未知列'T_RELATIF_SESS。REL_COM_ID' in 'on子句'

SELECT
`T_FORMATIONS`.`FOR_ID`, 
`T_FORMATIONS`.`FOR_TITRE`, 
`T_FORMATIONS`.`FOR_NIVEAU`, 
`T_FORMATIONS`.`FOR_MAX_PART`, 
`T_RELATIF_SESS`.`REL_COM_ID`, 
`T_RELATIF_SESS`.`REL_SES_ID`,
`T_SESSIONS`.`SES_ID`, 
`T_SESSIONS`.`SES_TITRE`, 
`T_SESSIONS`.`SES_TYPE`, 
`T_SESSIONS`.`SES_ADRESSE`, 
`T_SESSIONS`.`SES_NPA`, 
`T_SESSIONS`.`SES_LIEU`, 
`T_SESSIONS`.`SES_PRIX_SPECIAL`, 
`T_SESSIONS`.`SES_VAL_PRIX_SPECIAL`, 
`T_SESSIONS`.`SES_PRIX_SPEC_EXP`, 
`T_SESSIONS`.`SES_SUPP_COURS_INCL`, 
`T_SESSIONS`.`SES_SUPP_COURS_ADD`, 
`T_SESSIONS`.`SES_PRIX_SUPP_COURS_ADD`, 
`T_SESSIONS`.`SES_HORAIRE_SPECIAL`, 
`T_SESSIONS`.`SES_REMARQUES`, 
`T_SESSIONS`.`SES_REC_ID`, 
`T_COURS`.`COU_ID`, 
`T_COURS`.`COU_DATE`, 
    (SELECT `COU_DATE` FROM `T_COURS` WHERE `T_COURS`.`COU_SES_ID` = `T_SESSIONS`.`SES_ID` ORDER BY `COU_DATE` ASC LIMIT 1) AS `PREMIERCOURS`, 
    (SELECT `COU_DATE` FROM `T_COURS` WHERE `T_COURS`.`COU_SES_ID` = `T_SESSIONS`.`SES_ID` ORDER BY `COU_DATE` DESC LIMIT 1) AS `DERNIERCOURS` 
FROM `T_COURS` 
INNER JOIN `T_COMMANDES` ON `T_RELATIF_SESS`.`REL_COM_ID` = `T_COMMANDES`.`COM_ID` 
INNER JOIN `T_RELATIF_SESS` ON `T_SESSIONS`.`SES_ID` = `T_RELATIF_SESS`.`REL_SES_ID` 
INNER JOIN `T_SESSIONS` ON `T_COURS`.`COU_SES_ID` = `T_SESSIONS`.`SES_ID` 
INNER JOIN `T_FORMATIONS` ON `T_SESSIONS`.`SES_FOR_ID` = `T_FORMATIONS`.`FOR_ID` 
WHERE `T_COMMANDES`.`COM_ID`=19

在我添加

之前这个查询工作得很好
INNER JOIN `T_COMMANDES` ON `T_RELATIF_SESS`.`REL_COM_ID` = `T_COMMANDES`.`COM_ID` 
INNER JOIN `T_RELATIF_SESS` ON `T_SESSIONS`.`SES_ID` = `T_RELATIF_SESS`.`REL_SES_ID` 

WHERE `T_COMMANDES`.`COM_ID`=19

T_RELATIF_SESS只是"T_SESSIONS"answers"T_COMMANDES"表之间的一个关联表。我曾多次试图重写查询,但我仍然得到这个错误,我真的不明白为什么。每个字段都存在于我的数据库中。

我知道这可能很简单,但它真的让我头疼。有没有人能帮我一下或者解释一下我哪里做错了?我将不胜感激!非常感谢!

所以从你的描述中你试着运行没有

的脚本
INNER JOIN `T_COMMANDES` ON `T_RELATIF_SESS`.`REL_COM_ID` = `T_COMMANDES`.`COM_ID` 
INNER JOIN `T_RELATIF_SESS` ON `T_SESSIONS`.`SES_ID` = `T_RELATIF_SESS`.`REL_SES_ID` 

,它是工作的,但不是与那个脚本?尝试按顺序进行,因为在第一次内部连接时,您试图将表(T_COMMANDES)与下一个要连接的表(T_RELATIF_SESS)连接起来。

所以尝试:

INNER JOIN `T_SESSIONS` ON `T_COURS`.`COU_SES_ID` = `T_SESSIONS`.`SES_ID` 
INNER JOIN `T_FORMATIONS` ON `T_SESSIONS`.`SES_FOR_ID` = `T_FORMATIONS`.`FOR_ID` 
INNER JOIN `T_RELATIF_SESS` ON `T_SESSIONS`.`SES_ID` = `T_RELATIF_SESS`.`REL_SES_ID` 
INNER JOIN `T_COMMANDES` ON `T_RELATIF_SESS`.`REL_COM_ID` = `T_COMMANDES`.`COM_ID`

在添加连接后,表的顺序会混乱,因为您使用的是INNER JOIN,所以只要字段在连接上可见,就可以在任何地方声明表。它仍然会产生相同的结果。

要解决这个问题,请将这些新连接放在连接的下部:

FROM    T_COURS 
        INNER JOIN T_SESSIONS 
            ON T_COURS.COU_SES_ID = T_SESSIONS.SES_ID 
        INNER JOIN T_FORMATIONS 
            ON T_SESSIONS.SES_FOR_ID = T_FORMATIONS.FOR_ID
        INNER JOIN T_RELATIF_SESS 
            ON T_SESSIONS.SES_ID = T_RELATIF_SESS.REL_SES_ID 
        INNER JOIN T_COMMANDES 
            ON T_RELATIF_SESS.REL_COM_ID = T_COMMANDES.COM_ID 

抛出错误消息:Unknown column 'T_RELATIF_SESS.REL_COM_ID' in 'on clause'的原因是当T_COURST_COMMANDES连接时,列T_RELATIF_SESSREL_COM_ID还不可见,因为您已经在连接的下部声明了表T_RELATIF_SESS

尝试在加入表之前访问T_RELATIF_SESST_RELATIF_SESS后必须加入T_COMMANDES, T_SESSIONS后必须加入T_RELATIF_SESS

SELECT
`T_FORMATIONS`.`FOR_ID`, 
...
FROM `T_COURS` 
INNER JOIN `T_SESSIONS` ON `T_COURS`.`COU_SES_ID` = `T_SESSIONS`.`SES_ID` 
INNER JOIN `T_FORMATIONS` ON `T_SESSIONS`.`SES_FOR_ID` = `T_FORMATIONS`.`FOR_ID` 
INNER JOIN `T_RELATIF_SESS` ON `T_SESSIONS`.`SES_ID` = `T_RELATIF_SESS`.`REL_SES_ID` 
INNER JOIN `T_COMMANDES` ON `T_RELATIF_SESS`.`REL_COM_ID` = `T_COMMANDES`.`COM_ID` 
WHERE `T_COMMANDES`.`COM_ID`=19