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

时间:2013-03-19 07:53:20

标签: php mysql sql join

以下查询始终返回#1054 - 'on clause'中的未知列'T_RELATIF_SESS.REL_COM_ID'

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”和“T_COMMANDES”的表之间的关联表。 我试过多次重写查询,但我仍然得到这个错误,我真的不明白为什么。每个字段都存在于我的数据库中。

我知道这可能很简单,但它真的让我很头疼。有人可以帮我一把,或者只是向我解释一下我做错了什么?这将是非常感激的! 非常感谢你!

3 个答案:

答案 0 :(得分:1)

因此,根据您的描述,您尝试在没有

的情况下运行脚本
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`

答案 1 :(得分:1)

在添加联接后,您的表顺序会搞乱,因为您使用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_COURS加入T_COMMANDES时,列T_RELATIF_SESSREL_COM_ID尚未显示因为你已在联接的下半部分声明了表T_RELATIF_SESS

答案 2 :(得分:0)

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

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