我有以下加入
INNER JOIN @SynonymTable AS A ON ([Products].[Title] LIKE A.[Synonym])
@SynonymTable表变量包含(如果需要)项目列表,例如:
%shirt%
%blouse%
%petticoat%
这些都基于特定关键字搜索的同义词列表,例如术语“衬衫” - 从中我可以找到所有可能相关的项目等。问题是,如果有没有提供关键字,查询显然不会加入任何内容。
如果同义词表中没有项目,有没有消除连接或返回所有项目?
我找到了诸如Bypass last INNER JOIN in query这样的帖子但是我无法让它适合我的情景?
任何帮助或建议都会很棒。
答案 0 :(得分:7)
您可以使用以下选项之一:
SELECT * FROM Products
LEFT JOIN @SynonymTable AS A ON ([Products].[Title] LIKE A.[Synonym])
WHERE A.[Synonym] IS NOT NULL
OR NOT EXISTS (SELECT B.[Synonym] FROM @SynonymTable B)
答案 1 :(得分:4)
使用两个不同的查询,检查synonymtable
是否有行并使用inner join
运行查询,否则从products
表返回行
IF EXISTS (SELECT * FROM @SynonymTable)
BEGIN
SELECT * FROM Products
INNER JOIN @SynonymTable AS A ON ([Products].[Title] LIKE A.[Synonym])
END
ELSE
SELECT * FROM Products
答案 2 :(得分:1)
解决方案是不加入同义词表,而是在where子句
中使用它不是最优雅的代码,但应该有效(除非你有一个很大的同义词表,然后它会变慢)
where ((select count(1) from @SynonymTable) = 0 or
(select count(1) from @SynonymTable
where [Products].[Title] LIKE @SynonymTable.[Synonym]) > 0 ))