DECLARE @ID SMALLINT = (SELECT ID
FROM ABD
WHERE Name IN ('myName','yourName')
);
SELECT *
FROM XYZ
WHERE ID IN (@ID)
请建议如何在' IN'中使用变量。上述场景中 SQL SERVER 中的子句。 我知道这不是正确的方法。有一个类似的问题与不同的情况,所以也无法从那里得到很多帮助。谢谢!
答案 0 :(得分:2)
最好的方法是使用连接。你想做的事情是行不通的。
SELECT *
FROM XYZ x
join ABD a on a.ID = x.ID
where a.Name in ('myName', 'yourName')
答案 1 :(得分:1)
变量只能存储1个值。您可以删除变量并在IN子句中执行子查询,如下所示:
SELECT *
FROM XYZ
WHERE ID IN
(
SELECT ID
FROM ABD
WHERE Name IN ('myName','yourName')
)
或者使用EXISTS
的子查询,在大多数情况下优先于IN
,因为其中的子查询将返回IN
子句的每一行EXISTS
}当条件满足时,它将提前退出子查询:
SELECT *
FROM XYZ x
WHERE EXISTS
(
SELECT a.ID
FROM ABD a
WHERE a.Name IN ('myName','yourName') AND a.ID = x.ID
)
或者您可以使用另一个表格INNER JOIN
执行此操作:
SELECT x.*
FROM XYZ x
INNER JOIN ABD a ON a.ID = x.ID
WHERE a.Name IN ('myName','yourName')
x.*
将确保您只返回XYZ表中的数据。在大多数情况下,这也将比使用子查询提供更好的性能。