我是一个严肃的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。
如果我解释得很糟糕,请道歉。不知道怎么回答问题:)
答案 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
);