我有一系列连接在我的SELECT语句中,我希望执行。然而,我只想在满足某个条件时执行最后一个连接(INNER JOIN)。
该查询通过将逗号分隔的单词字符串分离为单词表来创建CTE。我还要将这个CTE与另一个表连接以过滤结果。但是,如果用户没有输入任何字符串,我不想连接这个表。是否有办法在INNER JOIN上加入一些条件?
SELECT dt.Document_ID,
dt.Document_NAME,
c.Company_ID,
c.Company_NAME,
ct.Category_ID,
ct.Category_NAME,
dt.Employee_ID,
e.First_NAME AS Employee_First_NAME,
e.Last_NAME AS Employee_Last_NAME,
p.Project_ID,
p.Project_NAME,
dt.Document_DATE,
dt.Updated_By_ID,
u.First_NAME AS Updated_First_NAME,
u.Last_NAME AS Updated_Last_NAME
FROM Documents_T1 AS dt
LEFT JOIN Companies_T1 AS c ON c.Company_ID=dt.Company_ID
LEFT JOIN Categories_T1 AS ct ON ct.Category_ID=dt.Category_ID
LEFT JOIN Users_T1 AS e ON e.User_ID=dt.Employee_ID
LEFT JOIN Projects_T1 AS p ON p.Project_ID=dt.Project_ID
LEFT JOIN Users_T1 AS u ON u.User_ID=dt.Updated_By_ID
INNER JOIN TagsCTE AS tcte ON tcte.Document_ID=dt.Document_ID
(SELECT TOP 1 ID FROM T) IS NULL
,因为它会产生歧义。如果T没有行,则确实会成功,但是如果它选择的第一个ID恰好具有空值(在这种情况下可能不太可能,但谁知道呢...),它也会成功。如果您使用此结构,我建议使用(SELECT COUNT(1) FROM T) = 0
或NOT EXISTS (SELECT NULL FROM T)
或更清晰的内容。 - Joe Enos