【问题标题】:In a SELECT command, how do I use data from one table to specify data in another?在 SELECT 命令中,如何使用一个表中的数据来指定另一个表中的数据?
【发布时间】:2022-01-03 07:14:28
【问题描述】:

我有 2 张桌子。重要的是PlayerIdUsername

CREATE TABLE [dbo].[Run] 
(
    [RunId]        INT       NOT NULL,
    [PlayerId]     INT       NOT NULL,
    [Duration]     TIME(7)   NOT NULL,
    [DateUploaded] NCHAR(10) NOT NULL,
    [VersionId]    INT       NOT NULL,

    PRIMARY KEY CLUSTERED ([RunId] ASC),

    CONSTRAINT [FK_Run_Player] 
        FOREIGN KEY ([PlayerId]) REFERENCES [dbo].[Player] ([PlayerId]),
    CONSTRAINT [FK_Run_Version] 
        FOREIGN KEY ([VersionId]) REFERENCES [dbo].[Version] ([VersionId])
);

CREATE TABLE [dbo].[Player] 
(
    [PlayerId]       INT       NOT NULL,
    [Username]       NCHAR(20) NOT NULL,
    [ProfilePicture] IMAGE     NULL,
    [Country]        NCHAR(20) NOT NULL,
    [LeagueId]       INT       NULL,
    [DateJoined]     DATE      NULL,

    PRIMARY KEY CLUSTERED ([PlayerId] ASC),

    CONSTRAINT [FK_Player_League] 
        FOREIGN KEY ([LeagueId]) REFERENCES [dbo].[League] ([LeagueId])
);

我有一个选择命令:

SELECT 
    PlayerId, Duration, VersionId, DateUploaded 
FROM 
    [Run]

(提前为我乱七八糟的伪代码道歉),我需要它做的是:

SELECT (Player.PlayerId.Username)

我基本上需要它来做,而不是只给我PlayerId,我需要它来获得与每个PlayerId匹配的相应Username(来自另一个表)(PlayerId是一个外国键)

所以说例如而不是返回

1, 2, 3, 4, 5

它应该返回

John12, Abby2003, amy_932, asha7494, luke_ww

假设,例如,Abby2003 的 PlayerId 为 2。

我已经进行了反复试验,但以前没有人尝试过,或者我搜索了错误的关键字。这是使用 VS 2022、ASP.NET Web 窗体和 Visual Basic,但这不会影响我认为的任何事情。任何语法想法或帮助将不胜感激。

【问题讨论】:

  • 如果这是针对 SQL Serverimage 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用此数据类型,并计划修改当前使用它的应用程序。请改用varbinary(max)See details here
  • 另外:NCHAR(n) 始终是固定长度,并将用空格填充到定义的长度 - 这通常是 NOT 你想要的 - 我强烈建议使用NVARCHAR(n) 代替。还有:DateUploaded 听起来像一个 DATE - 那么为什么将它存储为字符串? 总是使用最合适的数据类型——如果你想存储日期——使用DATE——不是字符串

标签: sql asp.net


【解决方案1】:

试试这个加入 2 Table togother

SELECT R.RunId
  ,R.PlayerId
  ,R.Duration
  ,R.DateUploaded
  ,R.VersionId
  ,P.Username
  ,P.ProfilePicture
  ,P.Country
  ,P.LeagueId
  ,P.DateJoined
   FROM Run R
   inner join Player P on R.PlayerId = P.PlayerId 

【讨论】:

  • 救命稻草,谢谢
【解决方案2】:

通常在这种情况下使用连接。您可以将这两个表连接在一起,给它们起别名(或者不要,真的是个人喜好),然后选择您需要的。在这种情况下,您可能需要一个内部连接。您的查询可能如下所示:

SELECT p.Username FROM [Run] r
INNER JOIN [Player] p ON r.PlayerId = p.PlayerId

如果你需要的话,你可以在后面加上一个WHERE 子句。

更多关于加入here

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多