Sql-Server-2008-R2

如何修復此 SQL 伺服器查詢 2008r2

  • January 30, 2022

我正在嘗試從表Titem列類型更新類型並將其設置為新 ID,同時讓它檢查使用者 ID 是否擁有這 2 個項目(我們正在更新的舊 ID,第二個 ID這只是為了檢查 user_id 是否擁有它)。然而,這是我做錯的部分,我不知道如何使用其中一種項目類型,因為它只是在更新另一種項目類型時,因為它們都共享類型作為參考。我知道我使用的就像有人會說古董連接一樣,除了我的目標是讓它工作而不是優化之外,我不是開發人員,也不是任何類型的編碼器。我是新手,基本了解不多。由於現在一切都已清除,如果有人能給我一個有關此工作的範例或如何使其工作,我將不勝感激。它一直有效,直到幾乎被忽略的 Exist 部分。隊列被完全執行,但是就像我最後說的那樣被忽略了。沒有消息:這幾乎是有效的/被執行的:

UPDATE TItem
SET type= 'newid' 
FROM Titem x, TCharacter y
WHERE x.char_id = y.id
and x.type = 'oldid'

table1 'tcharacter'

| id | create date | mode |

Table2 'titem'

| type | Attr | char_ID |

id=char_id 這是他們共享相同數據的唯一列目標:如果 USER_ID 有 3rditem id,則隊列應該被執行 -> 將舊 id 更新為 newid。這是我解釋它的一種方式。我在下面嘗試的是在檢查 user_id 是否存在第二個 itemid 時嘗試更新 ID。我試過的:

UPDATE TItem
SET type= 'newid' 
FROM Titem x, TCharacter y
WHERE x.char_id = y.id
and x.type = 'oldid'
and EXISTS
(SELECT type = '2nd id'  FROM Titem WHERE x.char_id = y.id);

我嘗試過的新 IF 查詢是無可非議的,它變得多麼混亂,問題在於,無論該項目是否存在,只要它存在於數據庫中一次,它就無關緊要,這會導致每個隊列都被執行記錄添加所有 x 和 y 規範顯然沒有任何結果,我做錯了。

IF EXISTS (SELECT 1 FROM Titem as x, TCharacter as y WHERE x.type = '2nd id' AND x.char_id = y.id) 

BEGIN
    
    UPDATE Titem
SET type =  'mewid'
FROM dbo.TItem AS x, TCharacter AS y
WHERE x.char_id = y.id
and x.type = 'oldid'

    
    
END

我不確定你的問題;請試試這個:

UPDATE x
SET x.type= 'newid' 
FROM Titem AS x
INNER JOIN TCharacter AS y ON x.char_id = y.id
INNER JOIN Titem AS z ON z.char_id = y.id
WHERE x.type = 'oldid'
and z.type = '2nd id';

小提琴手

也許您可以向 dbfiddle 添加一些數據…

引用自:https://dba.stackexchange.com/questions/306774