如何只执行一次“IN”子查询

时间:2014-08-04 15:46:15

标签: sql-server subquery

我的SQL Server查询速度很慢:

SELECT Style
FROM Storage
WHERE Style NOT IN (SELECT ValidStyle FROM ValidStyles)

此语法导致SELECT ValidStyle FROM ValidStyles对父查询的每一行执行一次。我怎样才能重写这个以仅运行子查询一次?

3 个答案:

答案 0 :(得分:6)

SELECT Style 
FROM Storage s
WHERE NOT EXISTS(SELECT * FROM ValidStyles vs WHERE vs.ValidStyle=s.Style)

答案 1 :(得分:0)

我只是在这里猜一下,但这应该有用......

 SELECT S.Style 
 FROM Storage S 
 LEFT OUTER JOIN ValidStyles vs on S.Style = VS.ValidStyle
 WHERE vs.ValidStyle is null

答案 2 :(得分:0)

SELECT Style
FROM Storage S
LEFT JOIN ValidStyles VS
ON
 S.Style = VS.ValidStyle
WHERE VS.ValidStyle IS NULL