Jump to content

Recommended Posts

Posted

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?

  • 2 weeks later...
Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.