在查询中混合ANSI 1992 JOIN和COMMA

我正在尝试以下MySQL查询来获取一些数据:

SELECT m.*, t.* FROM memebers as m, telephone as t INNER JOIN memeberFunctions as mf ON m.id = mf.memeber INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber WHERE mf.function = 32 

但我总是得到以下错误:

 #1054 - Unknown column 'm.id' in 'on clause' 

该列确实存在,并且只有一个表的查询工作正常(例如,当我删除电话)

有人知道我做错了吗?

看来你的要求是joinmembers表,但你jointelephone表。 只是改变他们的顺序。

 SELECT `m`.*, `t`.* FROM `memebers` AS `m` JOIN `telephone` AS `t` JOIN `memeberFunctions` AS `mf` ON `m`.`id` = `mf`.`memeber` AND `mf`.`function` = 32 JOIN `mitgliedTelephone` AS `mt` ON `m`.`id` = `mt`.`memeber`; 

希望这可以帮助你。 谢谢!!

根据这个链接 ,在build立连接时不要混淆两个符号。 用来join成员的逗号memebers as m, telephone as t ,随后调用inner join ,会触发未知的列错误。

要处理它,请使用CROSS/INNER/LEFT JOIN而不是逗号。

以前,逗号运算符(,)和JOIN都具有相同的优先级,所以连接expression式t1,t2 JOIN t3被解释为((t1,t2)JOIN t3)。 现在,JOIN具有更高的优先级,所以expression式被解释为(t1,(t2 JOIN t3))。 此更改会影响使用ON子句的语句,因为该子句只能引用连接的操作数中的列,优先级的更改会更改对这些操作数的解释。

为了教学目的,我想添加查询,我想应该是这样的:

 SELECT m.*, t.* FROM memebers as m JOIN telephone as t JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32 JOIN mitgliedTelephone as mt ON m.id = mt.memeber 

既然你不jointm ,最后的结果将是笛卡儿的产品。 你可能想要修改它。

我希望它帮助。