2014-03-30 48 views
0

我在我的數據庫中的這些表:我停留在某些SQL Server查詢

USER_ACCOUNT 
USER_CHARACTER 

USER_ACCOUNT列:帳戶ID,Character1,Character2,Character3

USER_CHARACTER列:它適用於所有數據特定字符 ,但在這種特定情況下,我們需要列用戶ID和 特殊點。

那麼,如何通過提供AccountID抓住所有character1,character2 and character3 from USER_ACCOUNT並檢查它們中一個具有>50000 SpecialPoints from USER_CHARACTER

如果發現其中一個字符有>50000 SpecialPoints,則更新特定字符並刪除-50000 SpecialPoints

我將在我的php腳本上創建兩個檢查,但我堅持創建實際查詢。

我使用MSSQL Server 2005的

+0

什麼SQL方言? MySQL的? MSSQL? PostgreSQL的? – Oldskool

+0

MSSQL SERVER 2005 – user3468696

+2

你的問題不清楚。請添加一個包含一些數據的示例,以清晰地表達您的意思 –

回答

0

好吧,我會採取刺傷它在我理解的問題的希望,但更可能會提供一個基礎,以幫助澄清。

注意:我假定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