我正在尝试以下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'
该列确实存在且查询仅使用一个表(例如,当我删除电话时)
有人知道我做错了吗?
答案 0 :(得分:15)
根据this link,在构建联接时不应混淆两种符号。您用来加入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
,因此最终结果将是笛卡尔积;你可能希望它被修改。
我希望它有所帮助。
答案 1 :(得分:-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`;
希望这会对你有所帮助。谢谢!!