SQL 查询连接表数据

我有 2 个表 UsersTimeSheetsTimesheets 表有 UserId 列,这显然是用户表中的用户 ID :)

逻辑

而且我正在尝试获取 Timesheets 表的所有数据以及用户表中的用户名,但不知何故,我的查询似乎是相反的!

现在我知道这可能是一个简单的查询,但我个人对 SQL 一无所知(我的错!)

这是我的查询:

CREATE PROCEDURE [dbo].[GetTimeSheets]
AS
BEGIN
    SELECT 
        t.Id,t.Enter_time,t.Exit_Time,t.Total,t.Date,t.Month,t.Year,u.Name AS username
    FROM 
        TimeSheets t
    FULL OUTER JOIN 
        Users u ON u.Id = t.UserId
    GROUP BY 
        t.Id,u.Name
END;

这里是返回数据的截图:

SQL 查询连接表数据

如您所见,我在时间表表中不存在任何数据的情况下获取我的用户名!

这个视图应该从用户那里获取时间表表,然后是每行的用户名。

更新

这是我的时间表表格架构

CREATE TABLE [dbo].[TimeSheets]
(
    [Id] INT NOT NULL PRIMARY KEY,[UserId] INT NOT NULL,[Enter_time] TIME NOT NULL,[Exit_Time] TIME NULL,[Total] TIME NULL,[Date] DATE NULL,[Month] NVARCHAR(50) NOT NULL,[Year] NVARCHAR(50) NOT NULL,CONSTRAINT [FK_TimeSheets_Users] 
        FOREIGN KEY ([UserId]) REFERENCES [dbo].[Users]([Id])
);

这是用户表

CREATE TABLE [dbo].[Users] 
(
    [Id]       INT            NOT NULL,[UserType] NVARCHAR (50)  NOT NULL,[Name]     NVARCHAR (100) NOT NULL,PRIMARY KEY CLUSTERED ([Id] ASC)
);
oopsqoo 回答:SQL 查询连接表数据

您似乎想要一个 INNER 联接,并且由于您没有进行任何聚合,因此不需要 GROUP BY

SELECT t.*,u.Name AS username
FROM TimeSheets t
INNER JOIN Users u 
ON u.Id = t.UserId;

通过执行 INNER 联接,您仅在 2 个表中的 2 行之间存在匹配时才能获得结果。

,

好吧,为了访问用户,您必须将用户表提供给 TimeSheets LEFT JOIN,以便在用户配置文件为空的情况下。

SELECT t.Id,t.Enter_time,t.Exit_Time,t.Total,t.Date,t.Month,t.Year,u.Name as username
FROM Users u
LEFT JOIN TimeSheets t ON u.Id = t.UserId
GROUP BY t.Id,u.Name
本文链接:https://www.f2er.com/1379.html

大家都在问