【问题标题】:Laravel.io, Postgresql : syntax error at or near “,”Laravel.io,Postgresql:“,”或附近的语法错误
【发布时间】:2020-02-27 22:57:31
【问题描述】:

我正在尝试设置一个 Laravel.io 社区门户,并在 [Github] (https://github.com/laravelio/portal) 上共享。

但是,当我在终端中运行composer setup 时遇到以下错误

语法错误:7 错误:“,”或附近的语法错误 第 1 行:更新 taggables,threads SET taggables.created_at = threads... ^ (SQL: UPDATE taggables, threads SET taggables.created_at = threads.created_at, taggables.updated_at = threads.updated_at WHERE taggables.thread_id = threads.id)

我已经多次检查了 SQL 语句,它检查正常,但不知道为什么它不会在运行时通过。

这是运行 SQL 的 PHP 代码。

 // Refactor tags
    Schema::rename('tagged_items', 'taggables');

    // Fix timestamps on taggables
    if (! app()->runningUnitTests()) {
        DB::statement('UPDATE taggables, threads SET taggables.created_at = threads.created_at, taggables.updated_at = threads.updated_at WHERE taggables.thread_id = threads.id');
    }

【问题讨论】:

标签: php laravel postgresql


【解决方案1】:

所以我发布了另一个问题,请求帮助将查询重组为 CTE(公用表表达式),这就是有效的答案。

update taggables ta
set created_at = th.created_at, updated_at = th.updated_at
from threads th
where ta.thread_id = th.id

请参考以下post的问答

谢谢。

【讨论】:

    【解决方案2】:

    您需要在 FROM 子句中关联这些表,或者您需要关联您的子查询。一种可能的方式:

    DB::statement('
    update threads
    set taggables.created_at = threads.created_at, taggables.updated_at = threads.updated_at
    from taggables
    where taggables.thread_id = threads.id
    ');
    
    
    // or perhaps:
    
    
    DB::statement('
    set threads.created_at = ( select taggables.created_at from taggables  where taggables.thread_id = threads.id), threads.updated_at = ( select taggables.updated_at from taggables  where taggables.thread_id = threads.id)
    ');
    

    【讨论】:

    • 谢谢,@samtax01。我尝试了查询,但又遇到了另一个障碍。我一直在尝试以通用表表达式 (CTE) 格式重写它,但最终感到沮丧。如果您能提供帮助,将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2016-11-22
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    相关资源
    最近更新 更多