Eu tenho 2 tabelas Users
e TimeSheets
, a Timesheets
tabela tem uma coluna UserId
que é a tabela de usuários do formulário de identificação dos usuários, obviamente :)
Lógica
E estou tentando obter todos os dados da Timesheets
tabela mais apenas o nome do usuário da tabela de usuários, mas de alguma forma parece que minha consulta é o contrário!
Agora eu sei que isso pode ser uma consulta simples, mas pessoalmente não tenho nenhuma ideia sobre SQL (minha má!)
Aqui está a minha consulta:
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,t.Enter_time,t.Exit_Time,t.Total, t.Date, t.Month, t.Year, u.Name
end;
e aqui está a captura de tela dos dados retornados:
Como você pode ver, eu obtenho os nomes dos meus usuários sem a existência de nenhum dado na tabela de quadros de horários!
Essa visualização deveria obter a tabela de quadros de horários e, em seguida, o nome de usuário de cada linha dos usuários.
aqui está o esquema da tabela do quadro de horários
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])
);
aqui está a mesa dos usuários
CREATE TABLE [dbo].[Users] (
[Id] INT NOT NULL,
[UserType] NVARCHAR (50) NOT NULL,
[Name] NVARCHAR (100) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Parece que você deseja uma INNER
junção e, como não está fazendo nenhuma agregação, não há necessidade de GROUP BY
:
SELECT t.*,
u.Name AS username
FROM TimeSheets t
INNER JOIN Users u
ON u.Id = t.UserId;
Ao fazer uma INNER
junção, você obtém resultados apenas quando há uma correspondência entre 2 linhas nas 2 tabelas.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras