【问题标题】:Types don't match between the anchor and the recursive part锚点和递归部分之间的类型不匹配
【发布时间】:2016-10-07 04:04:23
【问题描述】:

我正在执行以下查询:

WITH rg(id, childid, NAME) 
     AS (SELECT id, 
                0 ChildID, 
                NAME 
         FROM   kuaf 
         WHERE  id = 1000 
         UNION ALL 
         SELECT c.id, 
                c.childid, 
                k.NAME 
         FROM   kuafchildren c 
                JOIN rg p 
                  ON ( c.childid = p.id ) 
                JOIN kuaf k 
                  ON ( c.id = k.id )) 
SELECT DISTINCT ka.id 
FROM   rg, 
       lm_approvals app 
       JOIN kuaf ka 
         ON ( ka.id = app.useridentifier ) 
       JOIN dtree dt 
         ON ( dt.dataid = app.dataid ) 
WHERE  app.dataid = 25773 
       AND app.isapproved = 0 
       AND Replace(ka.NAME, ka.type + '_', dt.ownerid + '_') = rg.NAME 

但我以以下错误结束:

锚点和列中递归部分的类型不匹配 递归查询“rg”的“ChildID”。

【问题讨论】:

  • 如果您花时间正确格式化您的 SQL,您的问题会更容易理解。

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


【解决方案1】:

如果你改变第一个 SELECT 或递归 CTE 的锚部分如下,它将起作用

SELECT id, 
                CAST(0 as int) ChildID, 
                NAME 
         FROM   kuaf 
         WHERE  id = 1000

这是我们通常遇到的空字符串或在此步骤选择 NULL 的情况。 因此,CTE 需要在锚点 SELECT 处明确定义类型

【讨论】:

    【解决方案2】:

    我自己没有试过这个 从文件来看 有必要显式转换 0 type like kuafchildren.childid 通过 CAST(表达式 AS 数据类型 [(长度)])
    或者 转换(数据类型 [(长度)],表达式 [,样式])
    表达式 - 0 data_type [ ( length ) ] ) 同 kuafchildren.childid

    您可以尝试改写 0 孩子ID kuaf.id*0 ChildID 如果 kuaf.id 类型与 kuafchildren.childid 相同,这可能会起作用

    【讨论】:

      【解决方案3】:

      试试这个...

      ;WITH CTE RG AS (
      SELECT   Id,
               0 AS 'ChildId',
               Name
      FROM     Kuaf
      WHERE    id = 1000
      
      UNION ALL
      
      SELECT   C.Id,
               C.ChildId,
               C.Name
      FROM     KuafChildren C
               INNER JOIN RG ON (C.ChildId = RG.ChildId)
      )
      SELECT ...
      

      我假设 ChildId 列数据类型是 int

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-01
        • 2010-12-22
        • 1970-01-01
        • 2018-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-13
        相关资源
        最近更新 更多