SQL从列等于表变量的列中选择?

时间:2017-05-22 16:56:19

标签: sql sql-server variables select

我是一个严肃的SQL菜鸟,所以感谢任何帮助。我甚至很难解释我试图做的事情,所以我将列出我到目前为止所做的事情:

DECLARE @UserIDInt table (ID int);

INSERT into @UserIDInt
    SELECT UserId 
    FROM [LcsCDR].[dbo].[Users]
    WHERE [LcsCDR].[dbo].[Users].[UserUri] LIKE '%example';

SELECT * 
FROM [LcsCDR].[dbo].[SessionDetails]
WHERE [LcsCDR].[dbo].[SessionDetails].[User1Id] = @UserIDInt;


"DECLARE @UserIDInt table (ID int);"

这会使用名为" ID"

的列创建我的变量
INSERT into @UserIDInt
    SELECT UserId 
    FROM [LcsCDR].[dbo].[Users]
    WHERE [LcsCDR].[dbo].[Users].[UserUri] LIKE '%example';

这会根据WHERE语句是否匹配

将数值添加到ID列中
SELECT * 
FROM [LcsCDR].[dbo].[SessionDetails]
WHERE [LcsCDR].[dbo].[SessionDetails].[User1Id] = @UserIDInt;

这是我迷失的地方。如果列[LcsCDR].[dbo].[SessionDetails]与我的变量中的任何内容匹配,我会尝试从[LcsCDR].[dbo].[SessionDetails].[User1Id]返回所有行。我认为的问题是,SQL无法在变量列中查找多个值。基本上,我的变量@UserIDInt中的ID列将包含一堆数值。

如果[LcsCDR].[dbo].[SessionDetails].[User1Id]匹配@UserIDInt.ID列中的任何内容,如何执行最终的SELECT语句并让SQL返回所有结果?

我正在使用SQL Server 2014。

如果我解释得很糟糕,请道歉。不知道怎么回答问题:)

2 个答案:

答案 0 :(得分:1)

使用inner join

select sd.*
from [lcscdr].[dbo].[sessiondetails] sd 
  inner join @useridint i
    on i.id = sd.user1id;

或使用exists()

select sd.*
from [lcscdr].[dbo].[sessiondetails] sd 
where exists (
  select 1 
  from @useridint i
  where i.id = sd.user1id
  );

或使用in()

select sd.*
from [lcscdr].[dbo].[sessiondetails] sd 
where sd.user1id in (
  select id
  from @useridint i
  );

rextester演示:http://rextester.com/UVCB28056

答案 1 :(得分:0)

使用EXISTS

SELECT T1.*
FROM [lcscdr].[dbo].[sessiondetails] T1 WHERE EXISTS (
  SELECT 1 
  FROM @useridint T2
  WHERE T2.id = T1.user1id
  );