Sql 使用逻辑条件搜索数组

Sql 使用逻辑条件搜索数组,sql,arrays,vb.net,logical-operators,Sql,Arrays,Vb.net,Logical Operators,我有一个整数数组,我必须检查它的项是否符合逻辑条件。 例如: array: [1, 4, 17, 22, 45] condition: 1 AND 17 AND (22 OR 49) 如何检查数组元素是否满足条件。 我将数组元素存储在数据库中,作为具有公共标识符的行: ID_1 | 1 ID_1 | 4 ID_1 | 17 ID_1 | 22 ID_1 | 45 如果有人知道如何通过SQL或跨数组搜索来检查这些值是否满足条件,我将不胜感激。我假设您希望查找包含项目id 1和17以及(22或4

我有一个整数数组,我必须检查它的项是否符合逻辑条件。 例如:

array: [1, 4, 17, 22, 45]
condition: 1 AND 17 AND (22 OR 49)
如何检查数组元素是否满足条件。 我将数组元素存储在数据库中,作为具有公共标识符的行:

ID_1 | 1
ID_1 | 4
ID_1 | 17
ID_1 | 22
ID_1 | 45

如果有人知道如何通过SQL或跨数组搜索来检查这些值是否满足条件,我将不胜感激。

我假设您希望查找包含项目id 1和17以及(22或49)的发票。那你就可以了

SELECT invoice_id 
FROM items
WHERE item_id IN (1, 17, 22)
GROUP BY invoice_id
HAVING COUNT(*) = 3
UNION
SELECT invoice_id 
FROM items
WHERE item_id IN (1, 17, 49)
GROUP BY invoice_id
HAVING COUNT(*) = 3

只有当每个发票的
项目id
是唯一的时,这才有效。

我找到了一个反向逻辑的解决方案。对于表示项的条件中的每个元素(不是大括号或逻辑操作数,所以是整数),我检查它是否是数组的元素。如果是,则替换为true,否则替换为fasle。 所以我得到了这样的结果:

array: [1, 4, 17, 22, 45]
original conditions
  condition A: 1 AND 17 AND (22 OR 49)
  condition B: 17 AND 45
will turn into 
  condition A: true AND true AND (true OR false)
  condition B: true AND true
然后,我只需要将用布尔表达式计算字符串的函数设置为true或false

这里介绍如何计算逻辑表达式


所以我并没有用条件测试数组,然后检查条件中的项是否存在于数组中,并用true/false替换它们。我得到了一个应该计算的逻辑表达式。

可能是这样的:

Module StartupModule

    Sub Main()
        Dim nums() As Integer = {1, 4, 17, 22, 45}

        Dim hasNumbers As Func(Of Integer(), Boolean) = Function(arr)
                                                            Return arr.Contains(1) AndAlso arr.Contains(17) AndAlso (arr.Contains(22) OrElse arr.Contains(49))
                                                        End Function

        Dim result As Boolean = hasNumbers(nums)

        Console.WriteLine(result)

        Console.ReadLine()
    End Sub

End Module
编辑


它不会像刚才读到的那样,条件会是任何东西。所以我会使用。

表的结构是什么。如果没有数据库的结构,则无法回答此问题。您是否在询问如何为SELECT查询编写WHERE条件?它是发票项的表。每行用其标识符(整数值)表示项目,我必须检查发票(ID_1)是否有与逻辑条件相对应的项目。表中没有更多的列(价格、金额等),但发票ID和项目ID是用于检查ivoice项目是否满足条件的字段。请使用带有.Find/.FindAll()的列表而不是数组进行查看。(或者数组有一个Find?我没有看。).Find()使用一个lambda,可以根据需要进行复杂化。条件可以是任何东西,比如2或(5、7和15),所以我需要通用方法。我将行转换为数组,然后在其上应用逻辑条件。翻译为:如果发票中有苹果和香蕉,则需要在底部添加特定文本。如果我有(洋葱或大蒜)和鸡蛋,那么我会在底部写上“炒鸡蛋”,如果你把数据读入数组,这根本不是SQL问题。但你的问题到底在哪里?您不能执行类似于
array.Contains(1)AndAlso array.Contains(17)AndAlso(array.Contains(22)或lse array.Contains(49))
的操作吗?条件可以是任何内容,用户可以通过控制台将条件装箱,并且他们可以生成任何正确的逻辑表达式。最后,我使用contains作为检查条件中的项是否存在于项数组中的一部分,但只有在我将反向逻辑应用于该问题之后。