【问题标题】:I am stuck at some sql server queries我被一些 sql server 查询困住了
【发布时间】:2014-03-30 12:36:38
【问题描述】:

我的数据库中有这些表:

USER_ACCOUNT
USER_CHARACTER

USER_ACCOUNT 列:AccountID、Character1、Character2、Character3

USER_CHARACTER Columns:它保存特定字符的所有数据 分开,但在这种特定情况下,我们需要列 UserID 和 特别点。

那么,如何通过提供AccountID 来获取所有character1,character2 and character3 from USER_ACCOUNT 并检查其中哪一个拥有>50000 SpecialPoints from USER_CHARACTER

如果发现其中一个字符有>50000 SpecialPoints,则更新特定字符并删除-50000 SpecialPoints

我将在我的 php 脚本上创建两个检查,但我一直在创建实际的查询。

我正在使用 MSSQL Server 2005

【问题讨论】:

  • 您使用的是什么 SQL 方言? MySQL?微软SQL? PostgreSQL?
  • 您的问题不清楚。请添加一个带有一些数据的示例以清楚地表达您的意思
  • 我们有$_SESSION['AccountID'],所以我需要在USER_ACCOUNT 中检查与会话将提供的帐户ID 相关联的这些字符。之后我必须检查这 3 个字符是否有任何 SpecialPoints .....
  • 再次,不清楚。如果您只是在您的问题中包含一个简单的数据示例,那么您真的可以为自己和 SE 上的助手节省大量时间和精力。这将使我们更容易为您提供帮助。有时用英语表达问题很困难。

标签: php sql sql-server


【解决方案1】:

好的,我会尝试一下,希望我能理解这些问题,但更有可能它会提供帮助澄清的基础。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2018-08-09
    • 2023-02-09
    • 2019-04-30
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    相关资源
    最近更新 更多