【发布时间】:2022-01-03 07:14:28
【问题描述】:
我有 2 张桌子。重要的是PlayerId 和Username。
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 Server:
image数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用此数据类型,并计划修改当前使用它的应用程序。请改用varbinary(max)。 See details here -
另外:
NCHAR(n)始终是固定长度,并将用空格填充到定义的长度 - 这通常是 NOT 你想要的 - 我强烈建议使用NVARCHAR(n)代替。还有:DateUploaded听起来像一个 DATE - 那么为什么将它存储为字符串? 总是使用最合适的数据类型——如果你想存储日期——使用DATE——不是字符串