我問了一個關于 Oracle 的類似問題,但每個 DBMS 都不同。
我在https://dbfiddle.uk/i2wN57xq有一個示例表。我想使用 CTE 中的資料更新表格。像這樣的東西:
with vars as (select 5 as n from dual)
update test set data=data*vars.n, more=more*vars.n;
這當然行不通。如何在UPDATE報表中使用來自 CTE 的資料?
筆記:
- 我知道樣本是微不足道的,但我只是在尋找正確的技術。
- 我的大部分搜索都會導致嘗試更新 CTE 本身。我不想這樣做,只需將 CTE 用于其資料。
我找到了 PostgreSQL 和 SQL Server 的解決方案。對于 Oracle,我最終得到了一個子查詢,這很好,因為我可以從子查詢中獲得多個結果。如果它不適用于 CTE,我會接受類似的東西。
uj5u.com熱心網友回復:
您可以CROSS將表加入到MySqlCTE的陳述句中:UPDATE
WITH vars AS (SELECT 5 AS n)
UPDATE test t
CROSS JOIN vars v
SET t.data = t.data * v.n,
t.more = t.more * v.n;
查看演示
對于 MariaDB:
UPDATE test t
CROSS JOIN (
WITH vars AS (SELECT 5 AS n)
SELECT * FROM vars
) v
SET t.data = t.data * v.n,
t.more = t.more * v.n;
請參閱演示。
或更簡單(沒有 CTE):
UPDATE test t
CROSS JOIN (SELECT 5 AS n) v
SET t.data = t.data * v.n,
t.more = t.more * v.n;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/510807.html
