执行公用表表达式时获取语法错误

时间:2018-10-31 15:11:10

标签: sql sql-server join common-table-expression

我写了以下代码:

WITH b AS 
(
    SELECT * 
    FROM [Core].[dbo].[SalesAccount] 
    WHERE [SalesAccount].[RecordUpdateDate] > 2014-07-15
) 
a AS
(
    SELECT * 
    FROM [Core].[dbo].[SalesActivity]
) 
SELECT * 
FROM a 
INNER JOIN b ON a.SalesAccountSFID = b.SalesAccountSFID

我基本上是通过修改这里的查询来获得此信息的:https://towardsdatascience.com/how-to-ace-data-science-interviews-sql-b71de212e433

对于我的一生,我不明白为什么会引发错误?

  

第15层状态1,第2行,Msg 102
  'a'附近的语法不正确。

1 个答案:

答案 0 :(得分:3)

您可能只是缺少逗号:

with b as (
      SELECT *
      FROM [Core].[dbo].[SalesAccount]
      WHERE [SalesAccount].[RecordUpdateDate] > '2014-07-15'
     ),
     a as (
      SELECT *
      FROM [Core].[dbo].[SalesActivity]
     ) 
SELECT *
FROM a INNER JOIN
     b
     on a.SalesAccountSFID = b.SalesAccountSFID;

没有理由为此使用CTE。我发现这简单得多:

SELECT sa.*, sact.*
FROM [Core].[dbo].[SalesAccount] sa INNER JOIN
     [Core].[dbo].[SalesActivity] sact
     on sa.SalesAccountSFID = sact.SalesAccountSFID
WHERE a.RecordUpdateDate > '2014-07-15';

请注意,我还在日期常量周围加上了单引号。