在查询中混合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'

该列确实存在,并且查询仅适用于一个表(例如,当我卸下电话时)


有人知道我做错了吗?


呼唤远方
浏览 527回答 2
2回答

函数式编程

似乎您的要求是联接members表,但您正在联接telephone表。只是改变他们的顺序。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`;希望这对您有所帮助。谢谢!!

慕仙森

根据此链接,建立连接时不应混用这两种符号。您用于加入的逗号  memebers as m, telephone as t以及对的后续调用inner join触发了未知列错误。要处理它,请使用CROSS/INNER/LEFT JOIN而不是逗号。以前,逗号运算符(,)和JOIN都具有相同的优先级,因此将联接表达式t1,t2 JOIN t3解释为((t1,t2)JOIN t3)。现在JOIN具有更高的优先级,因此该表达式被解释为(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由于您尚未加入t和m,因此最终结果将是笛卡尔乘积;您可能希望对其进行修改。希望对您有所帮助。
打开App,查看更多内容
随时随地看视频慕课网APP