[英]I am stuck at some sql server queries
我的數據庫中有這些表:
USER_ACCOUNT
USER_CHARACTER
USER_ACCOUNT列:AccountID,Character1,Character2,Character3
USER_CHARACTER列:它分別保存特定字符的所有數據,但是在這種特定情況下,我們將需要UserID和SpecialPoints列。
因此,如何通過提供一個AccountID
character1,character2 and character3 from USER_ACCOUNT
獲取所有character1,character2 and character3 from USER_ACCOUNT
並檢查其中哪一個具有>50000 SpecialPoints from USER_CHARACTER
?
如果發現這些字符之一具有>50000 SpecialPoints
,則更新特定字符並刪除-50000 SpecialPoints
。
我將在我的php腳本上創建兩個檢查,但是我仍然無法創建實際的查詢。
我正在使用MSSQL Server 2005
好吧,我希望能對我有所了解,但很有可能會為澄清提供基礎。
注意:例如,假設USER_ACCOUNT.Character1是USER_CHARACTER中某個內容的FK。 它應該是。
幾種入門方法。
首先是一些樣本數據:
CREATE TABLE USER_ACCOUNT (AccountID INT, Character1 INT,Character2 INT,Character3 INT)
CREATE TABLE USER_CHARACTER (CharacterID INT, SpecialPoints INT)
GO
INSERT INTO USER_ACCOUNT VALUES (1,10,20,30),(2,40,50,60)
INSERT INTO USER_CHARACTER VALUES (10,10000),(20,20000),(30,30000),(40,40000),(50,50000),(60,60000)
GO
選項1是多次加入。
SELECT Character1
,c1.SpecialPoints
,CASE WHEN c1.SpecialPoints > 50000 THEN 1 ELSE 0 END Character1_50000PlusPoints
,Character2
,c2.SpecialPoints
,CASE WHEN c2.SpecialPoints > 50000 THEN 1 ELSE 0 END Character2_50000PlusPoints
,Character3
,c3.SpecialPoints
,CASE WHEN c2.SpecialPoints > 50000 THEN 1 ELSE 0 END Character3_50000PlusPoints
FROM USER_ACCOUNT a
LEFT JOIN USER_CHARACTER c1 ON a.Character1 = c1.CharacterID
LEFT JOIN USER_CHARACTER c2 ON a.Character2 = c2.CharacterID
LEFT JOIN USER_CHARACTER c3 ON a.Character3 = c3.CharacterID
GO
選項2將使用UNION
WITH cte AS (
SELECT AccountID
,CharacterID
,SpecialPoints
FROM USER_ACCOUNT a
INNER JOIN
USER_CHARACTER b ON a.Character1 = b.CharacterID
UNION ALL
SELECT AccountID
,CharacterID
,SpecialPoints
FROM USER_ACCOUNT a
INNER JOIN
USER_CHARACTER b ON a.Character2 = b.CharacterID
UNION ALL
SELECT AccountID
,CharacterID
,SpecialPoints
FROM USER_ACCOUNT a
INNER JOIN
USER_CHARACTER b ON a.Character3 = b.CharacterID
)
SELECT *
FROM cte
WHERE SpecialPoints > 50000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.