簡體   English   中英

我被困在一些SQL Server查詢中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM