jafm Posted May 27, 2014 at 04:12 PM Report #557144 Posted May 27, 2014 at 04:12 PM Boas. Estou a necessitar de ir buscar o primeiro valor de uma tabela. faço um select top 1 * from teste A query devolve o resultado esperado, mas quando coloco o top 1 dentro de um inner join nao devolve o campo pretendido, ou seja, algo como isto, inner join (select top 1 * from teste) as T se retirar o top 1 ja me devolve o campo preenchido, caso contrario devolve o campo a NuLL Não posso usar o metodo TOP dentro de um inner join?
Rechousa Posted June 6, 2014 at 12:18 AM Report #558413 Posted June 6, 2014 at 12:18 AM Olá, Sim, é possível. Aqui fica um exemplo - se executares várias vezes verás resultados diferentes. -- Modo de utilização: -- Copiar para o SQL Server Management Studio -- Executar várias vezes USE [tempdb]; GO SET NOCOUNT ON; -- Cria tabelas temporárias CREATE TABLE [dbo].[TabelaA] ( id INT IDENTITY(1, 1), Nome VARCHAR(10), CONSTRAINT [TabelaA_PK] PRIMARY KEY (id) ); CREATE TABLE [dbo].[TabelaB] ( id INT IDENTITY(1, 1), Nome VARCHAR(10), idTabelaA INT, CONSTRAINT [TabelaB_TabelaA_FK] FOREIGN KEY (idTabelaA) REFERENCES [dbo].[TabelaA] (id) ); -- Insere dados de teste INSERT INTO [dbo].[TabelaA] VALUES ('abcd'),('xpto'),('xyz'); INSERT INTO [dbo].[TabelaB] VALUES ('aaa', 1), ('bbb', 2), ('ccc', 3), ('ddd', 1), ('eee', 2), ('fff', 3); -- Faz uma query onde seleciona um registo apenas (TOP 1) da tabela A ordenado de forma aleatória (ORDER BY NEWID()) SELECT * FROM [TabelaB] B JOIN (SELECT TOP 1 id FROM [dbo].[TabelaA] ORDER BY NEWID()) A ON A.id = B.idTabelaA; -- Elimina as tabelas previamente criadas DROP TABLE [dbo].[TabelaB]; DROP TABLE [dbo].[TabelaA]; Espero ter ajudado, Pedro Martins Sharing is Knowledge! http://www.linkedin.com/in/rechousa
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now