sql - 在 INNER JOIN 子句中使用 OR
问题描述
我有一个动态查询,我在其中声明了 3 个不同的变量,例如:
DECLARE @JobNoteQuery NVARCHAR(MAX) = IIF(@JobNote = '%' , '' , ' INNER JOIN (SELECT ParentGuid FROM JobNotes JN WITH (NOLOCK)
WHERE JN.Note LIKE ''%''+@JobNote+ ''%''
GROUP BY ParentGuid) JN ON P.ProjectGuid = JN.ParentGuid');
DECLARE @ContactQuery NVARCHAR(MAX) = IIF(@Contact = '%' , '' , ' LEFT JOIN(SELECT
[ProjectKey]
FROM [ProjectCustomerContact] AS [pcc]
LEFT JOIN [Contact] AS [c] ON [c].[ContactKey] = [pcc].[ContactKey]
WHERE [c].[LastName] LIKE ''%''+@LastName+''%'') AS [pcc] ON [pcc].[ProjectKey] = [p].[ProjectKey]')
DECLARE @CustomerQuery NVARCHAR(MAX) = IIF(@Customer = '%' , '' , 'LEFT JOIN(SELECT
[ProjectKey]
FROM [ProjectCustomer] AS [pc]
LEFT JOIN [Customer] AS [c] ON [c].[CustomerKey] = [pc].[CustomerKey]
WHERE([c].[Name] LIKE ''%''+@CustName+''%''
OR [c].[DBA] LIKE ''%''+@CustName+''%'')) AS [PC] ON [pc].[ProjectKey] = [p].[ProjectKey]')
因此,在选择查询中,我将该变量用于 Joins 子句,例如:
...INNER JOIN [Region] AS [re] ON [a].[RegionKey] = [re].[RegionKey]
'+@JobNoteQuery+'
'+@ContactQuery+'
'+@CustomerQuery+'
WHERE...
我的问题是。如果我的树参数返回它们的值,我的意思是@JobNoteQuery
,@ContactQuery
并且 @CustomerQuery
,总是返回内部和左连接,但如果其中一个没有值,则值可以为 null,它只会返回空列表,所以有什么方法可以使用OR
子句进入INNER JOINS
?像:
...INNER JOIN [Region] AS [re] ON [a].[RegionKey] = [re].[RegionKey]
OR
'+@JobNoteQuery+'
OR
'+@ContactQuery+'
OR
'+@CustomerQuery+'
WHERE...
那不可能?问候
解决方案
将您的数据插入临时表,然后您可以开始使用提供的具有相同列数据类型的联合来获取 3 个查询中每一个的合并结果集。或者,您在临时表中有数据,需要保留所需的连接条件,否则此时内部连接将是一件小事。
推荐阅读
- javascript - 无法使用 css 类“填充:颜色!重要”更改 svg 图标的颜色
- scala - Mill:如何向模块添加额外的资源
- hive - Hive 爆炸/侧视图表
- apache-superset - 编写自定义后端逻辑以可视化超集图
- php - WordPress:表单数据未通过回显显示
- arrays - 在两个不同的数组中传递相同的值 - VBA
- c# - Microsoft.AspNetCore.Mvc.Versioning,版本 = 3.1.0.0 在 .net 核心 2.2 中不起作用
- python - 在 PySpark 数据框中的组中的列上应用函数
- python - 如何将迭代值作为参数发送到 lambda 函数?
- python - TensorFlow 估计器 DNNClassifier 无法进行 2 次线性分离