在查询中混合使用ANSI 1992 JOIN和COMMA

jan*_*jes 3 mysql sql join inner-join

我正在尝试以下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
Run Code Online (Sandbox Code Playgroud)

但我总是得到以下错误:

#1054 - Unknown column 'm.id' in 'on clause'
Run Code Online (Sandbox Code Playgroud)

该列确实存在,只有一个表可以正常查询(例如,当我删除电话时)

有人知道我做错了什么吗?

Seb*_*bas 15

根据此链接,在构建联接时不应混淆两种符号.您用于加入的逗号 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
Run Code Online (Sandbox Code Playgroud)

既然你不参加tm,最终的结果将是一个笛卡尔乘积; 你可能希望它被修改.

我希望它有所帮助.