我正在将我的所有SQL Server查询转换为MySQL,并且我的查询WITH
都失败了.这是一个例子:
WITH t1 AS
(
SELECT article.*, userinfo.*, category.*
FROM question
INNER JOIN userinfo ON userinfo.user_userid = article.article_ownerid
INNER JOIN category ON article.article_categoryid = category.catid
WHERE article.article_isdeleted = 0
)
SELECT t1.*
FROM t1
ORDER BY t1.article_date DESC
LIMIT 1, 3
Run Code Online (Sandbox Code Playgroud) mysql common-table-expression with-clause subquery-factoring mysql-8.0
我正在简化复杂的select语句,所以我想我会使用常用的表表达式.
声明一个cte工作正常.
WITH cte1 AS (
SELECT * from cdr.Location
)
select * from cte1
Run Code Online (Sandbox Code Playgroud)
是否可以在同一个SELECT中声明和使用多个cte?
即这个sql给出了一个错误
WITH cte1 as (
SELECT * from cdr.Location
)
WITH cte2 as (
SELECT * from cdr.Location
)
select * from cte1
union
select * from cte2
Run Code Online (Sandbox Code Playgroud)
错误是
Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'with'. If this statement is a common table …
Run Code Online (Sandbox Code Playgroud) sql t-sql sql-server common-table-expression sql-server-2008
我正在尝试使用MySQL创建一个带有"WITH"子句的视图
WITH authorRating(aname, rating) AS
SELECT aname, AVG(quantity)
FROM book
GROUP BY aname
Run Code Online (Sandbox Code Playgroud)
但似乎MySQL并不支持这一点.
我认为这是非常标准的,我确信Oracle支持这一点.反正强制MySQL使用"WITH"子句吗?我用MyISAM和innoDB引擎试过了.这两个都不起作用.
我想通过一个查询将数据插入到3个表中.
我的表如下所示:
CREATE TABLE sample (
id bigserial PRIMARY KEY,
lastname varchar(20),
firstname varchar(20)
);
CREATE TABLE sample1(
user_id bigserial PRIMARY KEY,
sample_id bigint REFERENCES sample,
adddetails varchar(20)
);
CREATE TABLE sample2(
id bigserial PRIMARY KEY,
user_id bigint REFERENCES sample1,
value varchar(10)
);
Run Code Online (Sandbox Code Playgroud)
我将获得一个密钥以换取每次插入,我需要在下一个表中插入该密钥.
我的查询是:
insert into sample(firstname,lastname) values('fai55','shaggk') RETURNING id;
insert into sample1(sample_id, adddetails) values($id,'ss') RETURNING user_id;
insert into sample2(user_id, value) values($id,'ss') RETURNING id;
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行单个查询,他们只是向我返回值,我不能立即在下一个查询中重用它们.
怎么做到这一点?
sql postgresql common-table-expression sql-insert sql-returning
我有以下CTE,它将为我提供整个发票的DocTotal.
;WITH CTE_DocTotal
AS
(
SELECT SUM(Sale + VAT) AS DocTotal
FROM PEDI_InvoiceDetail
GROUP BY InvoiceNumber
)
UPDATE PEDI_InvoiceDetail
SET DocTotal = CTE_DocTotal.DocTotal
Run Code Online (Sandbox Code Playgroud)
现在有了这个结果,我想在PEDI_InvoiceDetail中输入DocTotal值列.
我知道不会工作,我知道我错过了什么,它是什么?
我想使用WITH语句"声明"什么是有效的多个TEMP表.我试图执行的查询是这样的:
WITH table_1 AS (
SELECT GENERATE_SERIES('2012-06-29', '2012-07-03', '1 day'::INTERVAL) AS date
)
WITH table_2 AS (
SELECT GENERATE_SERIES('2012-06-30', '2012-07-13', '1 day'::INTERVAL) AS date
)
SELECT * FROM table_1
WHERE date IN table_2
Run Code Online (Sandbox Code Playgroud)
我已阅读PostgreSQL文档,并研究使用多个WITH
语句,但无法找到答案.
我正在执行以下声明:
;WITH cte AS (
SELECT
1 as rn,
'name1' as nm
UNION ALL
SELECT
rn + 1,
nm = 'name' + CAST((rn + 1) as varchar(255))
FROM cte a WHERE rn < 10)
SELECT *
FROM cte
Run Code Online (Sandbox Code Playgroud)
...完成错误...
Msg 240, Level 16, State 1, Line 2
Types don't match between the anchor and the recursive part in column "nm" of recursive query "cte".
Run Code Online (Sandbox Code Playgroud)
我在哪里弄错了?
通常在SQL Server
Common Table Expression子句中,语句前面有分号,如下所示:
;WITH OrderedOrders AS --semicolon here
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60
Run Code Online (Sandbox Code Playgroud)
为什么?
sql t-sql sql-server common-table-expression sql-server-2008
我有这个,我在设定总数时得到一个错误.为什么我不能多次访问cte?
ALTER PROCEDURE [dbo].[GetLeaguePlayers]
(
@idleague int,
@pageNumber int,
@pageSize int,
@total int OUTPUT
)
AS
WITH CTEPlayers AS
(
SELECT ROW_NUMBER() OVER (ORDER BY p.Name) AS RowNumber, p.Id, p.Name, t.Name AS Team
FROM Players p INNER JOIN Teams t ON p.IdTeam=t.Id INNER JOIN Leagues l ON l.Id=t.IdLeague
WHERE l.Id=@idleague
)
SELECT Id, Name
FROM CTEPlayers c
WHERE RowNumber>@pageSize*(@pageNumber-1) AND RowNumber<@pageSize*@pageNumber;
SET @total = ( SELECT COUNT(*) FROM CTEPlayers )
Run Code Online (Sandbox Code Playgroud) 你如何使用UNION
多个Common Table Expressions
?
我正在尝试汇总一些摘要数字,但无论我把它放在哪里;
,我总是会收到错误
SELECT COUNT(*)
FROM dbo.Decision_Data
UNION
SELECT COUNT(DISTINCT Client_No)
FROM dbo.Decision_Data
UNION
WITH [Clients]
AS ( SELECT Client_No
FROM dbo.Decision_Data
GROUP BY Client_No
HAVING COUNT(*) = 1
)
SELECT COUNT(*) AS [Clients Single Record CTE]
FROM Clients;
Run Code Online (Sandbox Code Playgroud)
更新:我很欣赏上面的例子我可以将单个 CTE移到开头,但我有一些我想要的CTEUNION
sql ×8
sql-server ×6
t-sql ×4
mysql ×2
postgresql ×2
mysql-8.0 ×1
sql-insert ×1
union ×1
with-clause ×1