以下查询始终返回#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”的表之间的关联表。
我试过多次重写查询,但我仍然得到这个错误,我真的不明白为什么。每个字段都存在于我的数据库中。
我知道这可能很简单,但它真的让我很头疼。有人可以帮我一把,或者只是向我解释一下我做错了什么?这将是非常感激的! 非常感谢你!
答案 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_SESS
。REL_COM_ID
尚未显示因为你已在联接的下半部分声明了表T_RELATIF_SESS
。
答案 2 :(得分:0)
您在加入表格之前尝试访问T_RELATIF_SESS
。您必须在T_COMMANDES
之后加入T_RELATIF_SESS
,T_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