【问题标题】:(', CROSS, FULL, INNER, JOIN, LEFT, NATURAL, ON, RIGHT or USING expected, got 'WITH'(', CROSS, FULL, INNER, JOIN, LEFT, NATURAL, ON, RIGHT 或 USING 预期,得到'WITH'
【发布时间】:2018-08-30 14:23:46
【问题描述】:

我有 SQL 请求

这是它的部分代码

    LEFT JOIN       dbo.contacts_client_organization cog WITH(NOLOCK)
ON              cog.clientid = be.clientid

在 cog 之后出现错误

'(', CROSS, FULL, INNER, JOIN, LEFT, NATURAL, ON, RIGHT 或 USING 预期,得到'WITH

我想重写查询以在 Amazon Redshift 上使用它

这是完整的查询

Code of query

我该如何解决?

【问题讨论】:

  • 看起来您正在尝试在 MySQL 数据库上使用 SQL Server 特定功能?
  • dbo.xxx 看起来像 SQL Server 语法。你真的在使用 MySQL 吗?另外,请包括整个查询,除非它是大量的,在这种情况下,包括足够的内容来理解这一点。
  • 我尝试重写 MSSQL 查询以在 redshift @TimBiegeleisen 上使用它
  • pastebin.com/rYGU4uCk 这是完整的请求@TimBiegeleisen
  • Redshift 使用 PostgreSQL,因此请限制自己使用 PostgreSQL 语法,这样您就可以更接近工作了。 PostgreSQL 文档可在线获取。

标签: sql amazon-redshift


【解决方案1】:

在 Redshift(或 Postgres)中不需要 nolock 提示。

由于其底层架构,读取器永远不会阻塞写入器,写入器永远不会阻塞读取器,因此 Redshift 和 Postgres 不需要在 SQL Server 中启用非锁定读取的提示

只需删除WITH(NOLOCK) 反正没有等效项。

【讨论】:

    【解决方案2】:

    在 MSSQL 中,您的查询可以正常工作。但是对于 MYSQL,如果您需要事务隔离,请尝试如下:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
    select ...
    
     LEFT JOIN       dbo.contacts_client_organization cog WITH(NOLOCK)
    ON              cog.clientid = be.clientid;
    COMMIT ;
    

    【讨论】:

    • 我需要在查询开始时写SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
    • 我认为当我使用 Redshift 及其 PostgreSQL 时,它不适合我?
    • @EugeneSukh 这可能对你有帮助吗? stackoverflow.com/questions/2394565/…
    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 2019-09-03
    • 2013-05-02
    • 2015-08-25
    • 2016-04-28
    相关资源
    最近更新 更多