如果其他数据类型为null,如何选择其中一个用户定义的表行

时间:2016-12-28 13:53:34

标签: sql sql-server

我在SQL Server 2012表@Table1中有两个用户定义的表类型,列名为ColumnTable1@Table2,其中一列为ColumnTable2

我希望从名为employeeData的物理表中选择数据。此表包含两列(ColumnTable1ColumnTable2)。

我想要的是当@table1@table2都有数据时,应返回与employeeData中的UDT匹配的值。如果只有其中一个,则应返回与该表匹配的值,如果两者都为null,则必须返回Employeedata表中的所有数据。

我尝试了一个可以正常工作的查询,它们都不是null。

SELECT * FROM employeeData WHERE
         (((NOT EXISTS (SELECT 1 FROM @Table1) OR ColumnTable1 IN (SELECT 
         ColumnTable1 FROM @Table1)) AND (NOT EXISTS (SELECT 1 FROM @Table2) 
         OR ColumnTable2 in (SELECT ColumnTable2 FROM @Table2)))

PS:此示例仅适用于两个表,我可能需要在将来添加新的此类用户定义表以进行类似过滤。

1 个答案:

答案 0 :(得分:1)

试试这个

select t.*
from employeeData t
left join @Table1 t1 on t1.ColumnTable1 =t.ColumnTable1 
left join @Table2 t2 on t2.ColumnTable2 =t.ColumnTable2
where 
not (t1.ColumnTable1 is null and exists (select top 1 1 from @Table1))
and
not (t2.ColumnTable2 is null and exists (select top 1 1 from @Table2))