我想比较两组值,看是否有交集。第一组值在运行时指定,第二组值存储在数据库的一行中。
下面是一些示例代码:
CREATE TABLE #tab1 (var1 INT, var2 INT , var3 INT)
INSERT INTO #tab1
VALUES (1,2,3),(0,0,0),(0,4,0)
Select
a = (case when 1 IN (var1,var2,var3) OR
2 IN (var1,var2,var3) OR
3 IN (var1,var2,var3)
THEN 1 else 0 end)
from #tab1
感觉代码太繁琐了,想知道有没有什么简单的方法可以实现。谢谢!
您可以只
JOIN
对真实或动态派生的表:如果列表很长,我可能会提前在#temp 表中创建它,而不是在语句中创建它,但是
JOIN
和EXISTS
逻辑是相同的。同样,我们可以使用
INTERSECT
instead ofJOIN
:在dbfiddle.uk进行测试。
您可以尝试以下而不是 CASE
如果不需要保留变量,则可以编写一个循环,例如,
......但这不是桌面。我们是 DBA,我们使用表。
给定三个设置输入和一个单独的值表,以下代码将起作用。
如果您不想使用“in”,我想这就是您要找的东西。老实说,我会使用“in”。它更简单,更容易编写。上面的代码需要一些时间才能完成。但是,我会按如下方式更新您的“in”代码: