我正试图找出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
在绩效方面实现目标的最佳方式是什么?
另外,请不要停留评论,可能的缺陷或解释其他解决方案如何以及为何更好。
答案 0 :(得分:-1)
假设T1.ID
和T2.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
但我认为,最终执行计划将是相同的。