我發現 Oracle 不支持LIMIT與MySQL不同的子句,并且只更新表中的 1 行我試過這個:
UPDATE "Schedule"
SET "Position" = 'Manager'
WHERE "Position" IN
(SELECT "Position"
FROM "Schedule"
WHERE "Position"='Tester'
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY);
并且更新了 3 行。
當我運行這個:
SELECT "Position"
FROM "Schedule"
WHERE "Position"='Tester'
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY;
我只有一排(應該是)。
但是像我之前提到的那樣更新 1 行不起作用。還有其他方法可以只更新 1 個特定行嗎?
uj5u.com熱心網友回復:
你只需要輕微的,前提是你的資料庫的版本至少12c,通過更換部分變化WHERE Position IN (SELECT Position與WHERE ID IN (SELECT ID為具有主列。目前的情況下,有沒有意義的,因為所有的測驗都將轉換為管理者甚至取代了IN <subquery>用='Tester'。因此,通過洗掉雙引號使用以下更新陳述句
UPDATE Schedule
SET Position = 'Manager'
WHERE ID IN
(SELECT ID
FROM Schedule
WHERE Position = 'Tester'
FETCH NEXT 1 ROW ONLY);
Demo
uj5u.com熱心網友回復:
理想情況下,您的"Schedule"表將有一個主鍵,您可以使用它來執行更新。假設"Schedule"沒有主鍵,您可以使用 ROWID:
UPDATE "Schedule"
SET "Position" = 'Manager'
WHERE ROWID IN (SELECT ROWID
FROM "Schedule"
WHERE "Position" = 'Tester'
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY);
請注意,像這樣使用 ROWID 是非常糟糕的做法,所有表都應該在創建時指定一個主鍵,以便可以可靠地找到各個行。要使一列或一組列成為有效的主鍵,它們必須是 A) 非 NULL、B) 唯一和 C) 不變。
另外 - 我強烈建議您養成使用表和列名稱的習慣,這些名稱不需要參考它們。帶引號的識別符號是語法錯誤的機會,它們對改善您的生活沒有任何幫助。如果您創建一個名為的表,SCHEDULE您仍然可以將 is 稱為Schedule、ScHeDuLe、schedule或您希望在代碼中使用的任何其他大小寫字母組合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/369929.html
上一篇:如何將此條件添加到此查詢中?
