2 回答
TA贡献1831条经验 获得超9个赞
似乎您的要求是联接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`;
希望这对您有所帮助。谢谢!!
TA贡献1854条经验 获得超8个赞
根据此链接,建立连接时不应混用这两种符号。您用于加入的逗号 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,因此最终结果将是笛卡尔乘积;您可能希望对其进行修改。
希望对您有所帮助。
添加回答
举报