标签: common-table-expression

我们是否需要对数据库进行写访问才能使用 CTE(公用表表达式)

我要求在查询中不使用#tempTables,因为将来我们将无法对预期的数据库进行写访问。所以我用 CTE 替换了 #tempTables。但我仍然怀疑在这种情况下它是否有效。

那么您能否告诉我,CTE 是否需要对数据库进行写访问?

为了清楚起见,请参阅我之前的帖子

sql oracle common-table-expression

1
推荐指数
1
解决办法
834
查看次数

SQL Server:从嵌套类别层次结构中获取产品的查询

我的 SQL 查询有问题。我这里有两个 SQL Server 表。

第一个:

CREATE TABLE [category].[Categories](
    [Id] [bigint] IDENTITY(1,1) NOT NULL, -- PRIMARY KEY
    [Name] [nvarchar](200) NOT NULL,
    [ParentId] [bigint] NULL -- CONSTRAINT [FK_Categories_Categories] FOREIGN KEY([ParentId])
);
Run Code Online (Sandbox Code Playgroud)

第二个是:

CREATE TABLE [product].[Products](
    [Id] [bigint] IDENTITY(1,1) NOT NULL, -- PRIMARY KEY
    [Name] [nvarchar](250) NOT NULL,
    [CategoryId] [bigint] NOT NULL, -- CONSTRAINT [FK_Products_Categories] FOREIGN KEY([CategoryId])
    [Description] [nvarchar](500) NULL,
    [ManufacturerUrl] [nvarchar](1000) NULL,
    [ImageUrl] [nvarchar](1000) NULL,
    [Price] [money] NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

假设有一个类别层次结构:

  • 电子产品(id = 1,parentId = null)
    • 相机(id = 3,parentId = …

sql sql-server common-table-expression

1
推荐指数
1
解决办法
2024
查看次数

每天选择最接近凌晨 4 点的 1 行?

我们目前正在对返回一系列数据的报告进行查询。客户已指定他们希望总共接收 5 行,其中包含前 5 天的数据(由开始日期和结束日期变量定义)。对于每一天,他们都需要最接近凌晨 4 点的行中的数据。

我设法让它工作了一天,但我当然不想联合 5 个单独的 select 语句只是为了获取这些值。有没有办法通过 CTE 来实现这一点?

select top 1 
    'W' as [RecordType]
,   [WellIdentifier]                    as [ProductionPtID]
,   t.Name                              as [Device Name]
,   t.RecordDate --convert(varchar, t.RecordDate, 112) as [RecordDate]
,   TubingPressure                      as [Tubing Pressure]
,   CasingPressure                      as [Casing Pressure]
from #tTempData t
Where cast (t.recorddate as time) = '04:00:00.000'
or datediff (hh,'04:00:00.000',cast (t.recorddate as time)) < -1.2
order by Name, RecordDate desc 
Run Code Online (Sandbox Code Playgroud)

sql sql-server common-table-expression

1
推荐指数
1
解决办法
138
查看次数

Hive CTE,我可以以表形式查询值吗?

我正在尝试创建查询中维度表,我想稍后在数据拉取中使用该表。在 MS SQL 中,我可以摆脱这个 CTE,它将使用值作为表:

with tbl_test_values as (select * from (
    VALUES  
        ('Number','1','One'),
        ('Number','5','Five'),
        ('Letter','A','First Letter'),
        ('Human','Bob','Dude')
    ) as 
    TestValues --equivalent of table name
    (Name, Value, Descript) --essentially field names
)
select * from actual_data_table f 
left outer join tbl_test_values d on f.Name=d.Name
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Hive 中复制上述 CTE“tbl_test_values”,即将自定义值集作为表查询?

谢谢

sql-server hadoop hive common-table-expression

1
推荐指数
1
解决办法
2488
查看次数

CTE 一直说锚和递归部分之间的类型不匹配

我有一个 CTE 与防御如下

    ;With Paths as (
    select s.ID as RootID,t.subject_ID,t.Parent_ID ,t.text, CONVERT(nvarchar(max),t.text) as Path,convert(nvarchar(max),t.subject_ID) as P2
    from
        @search s
            inner join
        SubjectHierarchy t
            on
                s.ID = t.subject_ID 
    union all
    select p.RootID,t.subject_ID,t.Parent_ID,p.text, t.text + '$' + p.Path,convert(nvarchar(10),t.subject_ID) + '$' + convert(nvarchar(10),p.P2) 
    from Paths p
            inner join
        SubjectHierarchy t
            on
                p.Parent_ID = t.subject_ID 
)
Run Code Online (Sandbox Code Playgroud)

但它一直在说错误

Msg 240, Level 16, State 1, Procedure f_fetchKeywordVocabullary, Line 30 类型在递归查询“路径”的“P2”列中的锚点和递归部分之间不匹配。

我的转换有什么问题??

sql sql-server common-table-expression

1
推荐指数
1
解决办法
1652
查看次数

存储过程中的 CTE 问题

我有一个这样的存储过程:

CREATE PROCEDURE prtl_usp_portal_logdaily 
    @startdate DATETIME,
    @enddate DATETIME,
    @usertype int,
    @gradelist varchar(1000) = null
AS
BEGIN
    DECLARE @qry NVARCHAR(MAX)
    SET @qry=''

    IF(@usertype = 1)
    BEGIN
       ;WITH mycte AS
       (
           SELECT CAST(@startdate AS DATETIME) DateValue
           UNION ALL
           SELECT DateValue + 1
           FROM mycte   
           WHERE DateValue + 1 <= @enddate
      )

      SET @qry = N'SELECT datepart(day,DateValue) AS daycode,
   (select count(DISTINCT a.userID) from PRTL_UserAccessLog a
   inner join prtlv_familydetails b
   on a.userid=b.familyid 
   INNER JOIN STD_StudentDetails c ON b.FamilyID = c.familyid
    INNER JOIN dbo.STD_CurrentAcademicInformation d …
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures common-table-expression

1
推荐指数
1
解决办法
1334
查看次数

SQLAlchemy 中带有子句的递归 CTE

我正在尝试在 SQLAlchemy 中实现一个 CTE,它从父/子树中的给定节点返回一个根节点。

我能够按照递归 CTE 查询中的示例在 SQLAlchemy 中生成 CTE 递归。

但我不确定如何在其上附加附加条件。即:

WITH ...
SELECT parent_id from parents
WHERE parent_id NOT IN (SELECT child_id FROM node_parent_relation );
Run Code Online (Sandbox Code Playgroud)

我想这样做,以便我只返回根节点。

查询在 SQL 中工作。

WITH RECURSIVE parents( child_id, parent_id ) 
AS (
  -- get leaf children
  SELECT child_id, parent_id
  FROM node_parent_relation
  WHERE child_id = '4415b581-0a31-43e8-a69d-d74caeccacd2'

  UNION ALL

  -- get all parents  
  SELECT t.child_id, t.parent_id
  FROM parents p
  JOIN node_parent_relation t
  ON p.parent_id = t.child_id
)
SELECT parent_id from parents
WHERE parent_id …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy common-table-expression

1
推荐指数
1
解决办法
2096
查看次数

递归获取Postgres表中树的根ID

我有一个Postgres表users(E_8_User),其中包含User_id作为主键,Boss作为同一个表的外键(它不可为空,如果某些用户没有boss,则其Boss属性= user_id)。我需要为表中的所有用户获取他们的老板,所以我尝试编写 CTE 查询:

WITH RECURSIVE herarchy_reports AS (
    SELECT E_8_User.User_id, E_8_User.Boss, 1 as lvl, E_8_User.User_id as RootUserID
    FROM E_8_User
    WHERE E_8_User.User_id=E_8_User.Boss
    UNION ALL
    SELECT usr.User_id, usr.Boss, lvl+1 as lvl, rep.RootUserID
    FROM herarchy_reports as rep JOIN E_8_User as usr ON
    rep.user_id=usr.Boss
)
SELECT * FROM herarchy_reports ORDER BY RootUserID;
Run Code Online (Sandbox Code Playgroud)

但它不起作用:数据库不断执行查询。我究竟做错了什么?

sql postgresql recursive-query common-table-expression hierarchical-data

1
推荐指数
1
解决办法
603
查看次数

从表中删除至少一个值为 NULL 的行

我在 MS SQL Server 中有下表:

RowID    PersonNum   Address1
  1      456         1 My street
  2      NULL        1 My street
  3      789         1 My street
  4      987         2 My street
  5      963         2 My street
  6      852         3 My street
  7      741         3 My street
  8      NULL        3 My street
Run Code Online (Sandbox Code Playgroud)

我想删除同一地址中的所有行,其中至少有一个 personnum = NULL

所以从上面,我需要删除 RowID 的 1、2、3、6、7、8。

RowID 的 4 和 5 没问题,因为它们有一个 PersonNum。我如何在 T SQL 中实现这一点?这可以使用 CTE 吗?

sql t-sql sql-server common-table-expression sql-delete

1
推荐指数
1
解决办法
67
查看次数

WHERE 子句中未引用 MySQL CTE

我无法理解为什么CTE不能从WHERE子句中引用 a 。在下面的代码中,第一个查询工作正常,但在第二个查询中,只需用WHERE计算该值的 CTE替换子句中的值,就会产生错误“'where 子句'中的未知列'cte'”。

# This query works

SELECT * FROM stock_prices
WHERE Country_Exchange_Code = 'T' AND Stock_Code IN ('1332');


# But this query produces an error

WITH
    cte AS (SELECT '1332')    
SELECT * FROM stock_prices
WHERE Country_Exchange_Code = 'T' AND Stock_Code IN (cte);


# Here is some data to test these two queries with

CREATE TABLE stock_prices (Country_Exchange_Code VARCHAR(2), Stock_Code VARCHAR(4), Date DATE, Close FLOAT);
INSERT INTO stock_prices VALUES
("T", "1301",   '2019-10-29', …
Run Code Online (Sandbox Code Playgroud)

mysql where-clause common-table-expression

1
推荐指数
1
解决办法
204
查看次数