字段列表中的未知表,即使表肯定存在

时间:2012-08-31 17:26:20

标签: mysql

我正在尝试将3张桌子加在一起,但我不断收到“未知的桌子”电话'在字段列表中。我知道桌子上的电话'存在

这有效......

$sql = "SELECT * FROM calls WHERE id = '$diary_id'";

但这并不......

$sql = "SELECT * FROM (SELECT calls.id AS calls_id, calls.assigned_user_id AS assigned_user) calls
RIGHT JOIN accounts on accounts.parent_id = accounts.id
LEFT JOIN users on assigned_user = user.id
WHERE calls_id = '$diary_id'";

我正在尝试使用别名,因为我尝试加入的表具有相同的字段名称(我必须使用的是继承的数据库)。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:4)

您的子查询:

SELECT calls.id AS calls_id, calls.assigned_user_id AS assigned_user

正在选择calls.idcalls.assigned_user,但没有FROM子句,calls表/别名已定义。将FROM calls添加到子查询中(尽管为什么要在这里使用子查询?)。

您在加入条件中也指user.id,但该表名为users

您对帐户表的加入条件accounts.parent_id = accounts.id看起来非常可疑:您似乎正在尝试遍历使用邻接列表模型存储的分层数据,但此连接将无法完成那;实际上,MySQL不支持递归函数 - 所以它根本不适合这个模型。您可以考虑重构数据以使用嵌套集或闭包表。有关详细信息,请参阅this answer

相反:

SELECT *
FROM   calls
  RIGHT JOIN accounts ON accounts.parent_id  = accounts.id -- is this right?
   LEFT JOIN users    ON calls.assigned_user = user.id
WHERE calls.id = '$diary_id'