Mysql “on子句”中的列未知错误
因此,我尝试查询三个表,可以执行三个表中的两个表,但不能执行第三个表,我尝试了几种方法,并不断出现此错误:Mysql “on子句”中的列未知错误,mysql,sql,Mysql,Sql,因此,我尝试查询三个表,可以执行三个表中的两个表,但不能执行第三个表,我尝试了几种方法,并不断出现此错误: #1054 - Unknown column 'thirdDATA.creator_id' in 'on clause' 这项工作: SELECT * FROM `mainDATA` LEFT JOIN altDATA ON creator_id = altDATA.creator_id 这项工作: SELECT * FROM `mainDATA` LEFT JOIN thi
#1054 - Unknown column 'thirdDATA.creator_id' in 'on clause'
这项工作:
SELECT *
FROM `mainDATA`
LEFT JOIN altDATA ON creator_id = altDATA.creator_id
这项工作:
SELECT *
FROM `mainDATA`
LEFT JOIN thirdDATA ON creator_id = thirdDATA.creator_id
LIMIT 0 , 30
这将获得一个错误:
SELECT *
FROM `mainDATA`
LEFT JOIN altDATA ON creator_id = altDATA.creator_id
JOIN thirdDATA ON creator_id = thirdDATA.creator_id
每当查询中有多个表时,请限定所有列名 你大概打算:
SELECT *
FROM mainDATA LEFT JOIN
altDATA
ON mainDATA.creator_id = altDATA.creator_id JOIN
thirdDATA
ON mainDATA.creator_id = thirdDATA.creator_id;
如果mainDATA没有创建者id,您描述的行为将起作用。如果是这种情况,第一个查询将被解释为:
SELECT *
FROM `mainDATA` LEFT JOIN
altDATA
ON altDATA.creator_id = altDATA.creator_id;
第三个将生成错误,因为两个表都有creator_id,并且不清楚last on子句所指的是哪一个。混合JOIN和LEFT JOIN时,请使用括号覆盖优先级:
SELECT *
FROM ( `mainDATA`
LEFT JOIN altDATA ON creator_id = altDATA.creator_id )
JOIN thirdDATA ON creator_id = thirdDATA.creator_id
或
这样做可以解决您的问题,或者指出创建者id不可访问,因为它隐藏在参数中。最后一个不合格的创建者id引用是不明确的…但是查询与您的错误消息不匹配…因此,这是否是您收到错误的原因尚不清楚。此外,在涉及多个表的任何查询中使用非限定字段名都是不好的做法。请修改错误消息以匹配表名。最佳做法是限定所有列引用。来自MySQL的错误消息是预期行为。感谢分享状态报告。有问题吗?我在您的查询中没有看到名为creators的表。如果主表没有键进行联接,则此查询的目的是什么?谢谢您的帮助,mainDATA表确实有一个creator\u id。使用您的代码,我仍然得到错误:1054-on子句@rowdyruckus中的未知列“mainDATA.creator\u id”-此方法的一个演示程序有效:-并且原始查询失败,on子句中的列“creator\u id”不明确。因此,我不确定您是如何得到错误的-这些是确切的查询还是已被解释过?即使只是这部分也返回相同的错误:SELECT*FROM mainDATA LEFT JOIN altDATA ON mainDATA.creator\U id=altDATA.creator_id@rowdyruckus . . . 您可以设置SQL小提琴吗?
SELECT *
FROM `mainDATA`
LEFT JOIN ( altDATA
JOIN thirdDATA ON creator_id = thirdDATA.creator_id )
ON creator_id = altDATA.creator_id