下面的查询总是返回#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_COURS
与T_COMMANDES
连接时,列T_RELATIF_SESS
。REL_COM_ID
还不可见,因为您已经在连接的下部声明了表T_RELATIF_SESS
。
尝试在加入表之前访问T_RELATIF_SESS
。T_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