基于输入参数的SQL Server查询条件

时间:2018-11-04 16:07:11

标签: sql sql-server predict

在编写SQL服务器查询逻辑时,我需要一些帮助。 我有一个三列的表Xyz

enter image description here

我必须根据用户输入的json找到所有实体。
逻辑是这样的。

  1. 如果用户输入数组为{“ button”},则查询为 “从XYZ中选择*,其值类似于'%button%';”

  2. 如果用户输入为{“ button”,“ text”},则查询为: “从XYZ中选择*,其中的值如“%button%”或值如“%text%”;“

  3. 如果用户输入为{“ button”,“ text”,“ page”},则查询为: “从XYZ中选择*,其中(类似“%button%”的值或类似“%text%”的值)AND(类似“%button%”的值或类似“%page%”的值)AND(类似“%page%”的值或“%text%”之类的值)和(“%button%”之类的值或“%text%”之类的值或“%page%”之类的值);“

  4. 如果用户输入为{“ button”,“ text”,“ page”,“ element”},则查询为: “从XYZ中选择*,其中(类似“%button%”的值或类似“%text%”的值或“%page%”的值)AND(类似“%button%”的值或“%page%”的值或AND(例如“%element%”的值或“%page%”的值或“%element%”的值)AND(“%button%”的值或“%text%”的值OR值(例如“%element%”)或(例如“%button%”的值或“%text%”的值或“%element%”的值或“%element%”的值);“

  5. 如果用户输入为{“ button”,“ text”,“ page”,“ element”,“ add”},则查询逻辑应在and条件中设置一组4个元素。

因此,逻辑是我可以接收任何可能包含“ n”个元素的用户输入。对于那些n个元素,我需要添加n-1和上面的条件,并将结果返回给用户。如何编写逻辑来创建这样的查询?任何的意见都将会有帮助。

1 个答案:

答案 0 :(得分:1)

  

如果用户输入的是{“ button”,“ text”,“ page”,“ element”}

尝试以下操作:

value

这里的基本要点是Like %..%是一个比较函数,根据匹配,它将返回0或1。

从您的问题陈述中,似乎可以找到 n-1 个单词的任意组合,,所有 n 个单词都可以被发现。

因此,需要在SELECT * FROM XYZ WHERE ((value like '%value_1%') + (value like '%value_2%') + .... (value like '%value_n-1%') + (value like '%value_n%')) >= n-1 中找到3个或更多输入关键字 。因此,所有这些比较条件的总和必须为至少3。这应注意所有可能的组合

因此,对于 n 个输入,您将执行以下操作:

SELECT * FROM XYZ 
WHERE value LIKE '%value_1%'

对于 n = 1 ,这是一种特殊情况,您只需执行以下操作:

{
    "data": {
        "sequence_length":30,
        "train_test_split": 0.85,
        "normalise": false,
        "num_steps": 5
    },
    "training": {
        "epochs":200,
        "batch_size": 64
    },
    "model": {
        "loss": "mse",
        "optimizer": "adam",
        "layers": [
            {
                "type": "lstm",
                "neurons": 51,
                "input_timesteps": 30,
                "input_dim": 101,
                "return_seq": true,
                "activation": "relu"
            },
            {
                "type": "dropout",
                "rate": 0.1
            },
            {
                "type": "lstm",
                "neurons": 51,
                "activation": "relu",
                "return_seq": false
            },
            {
                "type": "dropout",
                "rate": 0.1
            },
            {
                "type": "dense",
                "neurons": 101,
                "activation": "relu"
            },
            {
                "type": "dense",
                "neurons": 101,
                "activation": "linear"
            }
        ]
    }
}