Tsql 使用不在多个列中的筛选器

Tsql 使用不在多个列中的筛选器,tsql,Tsql,有没有更好的方法来编写以下查询,以尽量减少WHERE语句中的代码重复 SELECT TA.* FROM TA JOIN TB on TA.id = TB.id JOIN TC on TB.id =TC.id JOIN TD on TC.id = TD.id JOIN TE on TD.id = TE.id WHERE TC.Name NOT IN (‘John’,’William’,’Jacob’,’Henry’,’David’) AND TD.Name NOT IN (‘John’,’Will

有没有更好的方法来编写以下查询,以尽量减少WHERE语句中的代码重复

SELECT TA.*
FROM TA
JOIN TB on TA.id = TB.id
JOIN TC on TB.id =TC.id
JOIN TD on TC.id = TD.id
JOIN TE on TD.id = TE.id
WHERE TC.Name NOT IN (‘John’,’William’,’Jacob’,’Henry’,’David’)
AND TD.Name NOT IN (‘John’,’William’,’Jacob’,’Henry’,’David’)
AND TE.Name NOT IN (‘John’,’William’,’Jacob’,’Henry’,’David’)
注意:过滤器总是相同的:
不在('John'、'William'、'Jacob'、'Henry'、'David')
使用,您可以执行以下操作:

SELECT  TA.*
FROM TA
JOIN TB on TA.id = TB.id
JOIN TC on TB.id =TC.id
JOIN TD on TC.id = TD.id
JOIN TE on TD.id = TE.id
WHERE NOT EXISTS (
    SELECT 1
    FROM (VALUES('John'),('William'),('Jacob'),('Henry'),('David')) V(name)
    WHERE Name IN(TC.Name, TD.Name, TE.Name)
)

如果必须在多个列上使用相同的筛选器,则表明数据库有问题。您应该尝试规范化数据。不相关,但是:
'
'
都应该是“直接单引号”:
'