3

我正在尝试以下 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'

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

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

4

2 回答 2

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

由于您没有加入tand m,因此最终结果将是笛卡尔积;您可能希望对其进行修改。

我希望它有所帮助。

于 2012-06-24T18:22:04.100 回答
-1

看来您的要求是加入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`;

希望这对您有所帮助。谢谢!!

于 2012-06-24T18:22:25.760 回答