T-SQL加入列或固定值

时间:2015-09-17 10:39:13

标签: sql-server tsql

我正试图找出T-SQL中的一些基本规则。

我在这里想要实现的是,只获得Table1中与Table2匹配的记录 - AND - 来自Table1的所有记录,其中'Valid'列的值为1(= true)。 以前我用两个选择和一个这样的UNION完成了这个:

SELECT T1.*
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.ID = T2.ID
UNION
SELECT T1.*
FROM Table1 T1
WHERE T1.Valid = 1

但除了使用多个选择和UNION实现这一点之外,还有其他方法吗? 在摆弄时,我做了以下代码位,但是只有在Table2中只有一个匹配时才会起作用(否则它会将记录乘以T2中的匹配数)。

SELECT T1.*
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.ID = T2.ID
    OR T1.Valid = 1

在绩效方面实现目标的最佳方式是什么?

另外,请不要停留评论,可能的缺陷或解释其他解决方案如何以及为何更好。

1 个答案:

答案 0 :(得分:-1)

假设T1.IDT2.ID是唯一的或主键:

如果有重复项,您可能需要写SELECT DISTINCT T1.*。 orinal中的UNION运算符仅选择不同的值。

这个人应该这样做:

SELECT T1.*
FROM Table1 T1
WHERE T1.ID IN ( SELECT T2.ID FROM Table2 T2 WHERE T2.ID IS NOT NULL)
   OR T1.Valid = 1

SELECT T1.*
FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.ID = T2.ID
WHERE T2.ID IS NOT NULL OR T1.Valid = 1

但我认为,最终执行计划将是相同的。