【发布时间】:2020-01-18 12:08:16
【问题描述】:
MYSQL 在处理通过别名调用的表的子查询时触发 SQLSTATE[42S02] 错误
"UPDATE call_log AS c1 INNER JOIN call_log AS c2 ON c1.id = c2.id SET c1.end ='".$reponse."' WHERE c1.id = (SELECT MAX(c2.id) FROM (SELECT * from c2 WHERE c2.num =".$numero." ) derivee )";
期望的结果是更新 call_log 表中包含 $num 变量的最后一个匹配行。由于 MYSQL 阻止基于同一个表进行子查询,因此我使用别名来引用此处推荐的那些表
mySQL error: #1248 - Every derived table must have its own alias
或这里 What is the error "Every derived table must have its own alias" in MySQL?
我得到的错误是:
PHP 致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[42S02]:未找到基表或视图:1146 表 'ERP.c2' 不存在'
【问题讨论】:
-
我是否正确地说您正在将表加入到自身中?
-
样本数据、期望的结果以及对您的逻辑的解释都会有所帮助。
-
我在通话开始和结束时登录数据库。 'end' 事件通过 eventlistener 函数发生。当然,我只是想更新被调用的数字匹配的字段以及它是最后一个的字段。
-
还是同样的错误。我的数据库确实叫ERP。该表是具有 2 个别名 c1 和 c2 的 call_log。我不明白的是为什么 MYSQL 不明白 c2 是 call_log 的别名而不是基表?