【问题标题】:SQLSTATE[42S02] - from subquerySQLSTATE[42S02] - 来自子查询
【发布时间】: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 的别名而不是基表?

标签: mysql sql


【解决方案1】:

好的,我找到了问题。我稍微更改了命令以简化请求。

$sql ="UPDATE call_log as c1 SET c1.end = '".$reponse."' WHERE c1.id = (SELECT MAX(derive.id) FROM (SELECT * FROM call_log c2) derive WHERE derive.num =".$numero.")";

主要区别在于我为表本身创建了一个别名为 c2 但是 我还使用了 (SELECT * FROM call_log c2) derive 的别名,其中 derive 将是过滤子查询结果!!

如果对别人有帮助的话......

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2019-08-03
    • 2023-02-02
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多