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

Posted

技术标签:

【中文标题】(\', CROSS, FULL, INNER, JOIN, LEFT, NATURAL, ON, RIGHT 或 USING 预期,得到\'WITH\'【英文标题】:(', 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 文档可在线获取。 【参考方案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 这可能对你有帮助吗? ***.com/questions/2394565/…

以上是关于(', CROSS, FULL, INNER, JOIN, LEFT, NATURAL, ON, RIGHT 或 USING 预期,得到'WITH'的主要内容,如果未能解决你的问题,请参考以下文章

SQL中inner join,outer join和cross join的区别

SQL中inner join,outer join和cross join的区别

SQL中inner join,outer join和cross join的区别

Spark SQL 中的 OUTER 和 FULL OUTER 有区别吗?

MySQL中inner join 和 cross join 的区别

MySQL中inner join 和 cross join 的区别