You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AND、OR、NOT逻辑的只读数据库自定义过滤方案问询

优化多条件规则匹配的数据结构与查询方案(支持AND/OR/NOT与多选)

需求背景

基于用户对问题的答案,从只读数据库中匹配对应结果,规则需满足:

  • 支持AND、OR、NOT逻辑运算符(比如某结果在问题答案不为指定值时触发)
  • 问题答案为整数,支持多选(如Q2选3、4表示同时满足两个条件)
  • 全量场景包含20-30个问题,逻辑规则一致

原规则定义示例

IDQ1Q2Result
111 | 2A
213B
314C
413 & 4D
5NOT 1E
.............

匹配规则示例

  • Q1: 1, Q2: 1 -> A(规则ID 1)
  • Q1: 1, Q2: 2 -> A(规则ID 1)
  • Q1: 1, Q2: 3 -> B(规则ID 2)
  • Q1: 1, Q2: 4 -> C(规则ID 3)
  • Q1: 1, Q2: 3, 4 -> D(规则ID 4)
  • Q1: 2, Q2: 1 -> E(规则ID 5,Q2可任意或无值)

现有方案(宽表结构)

现有方案将OR逻辑拆分为多行,AND逻辑合并为排序后的数字(如Q2=34表示需同时选3和4),为每个问题新增_neg(是否取反)、_empty(是否忽略)字段,形成宽表:

idq1q1_negq1_emptyq2q2_negq2_emptyresult
11FALSEFALSE1FALSEFALSEA
11FALSEFALSE2FALSEFALSEA
21FALSEFALSE3FALSEFALSEB
31FALSEFALSE4FALSEFALSEC
41FALSEFALSE34FALSEFALSED
51TRUEFALSEFALSETRUEE

查询示例(Q1=1、Q2=4时)

SELECT DISTINCT result FROM example_table
WHERE 
  (q1_empty OR (q1 = 1 and NOT q1_neg) OR (q1 != 1 AND q1_neg)) AND -- 匹配Q1=1的逻辑
  (q2_empty OR (q2 = 4 and NOT q2_neg) OR (q2 != 4 AND q2_neg));    -- 匹配Q2=4的逻辑

测试表SQL

CREATE TABLE IF NOT EXISTS example_table (
    id integer,
    q1 integer,
    q1_neg boolean,
    q1_empty boolean,
    q2 integer,
    q2_neg boolean,
    q2_empty boolean,
    result char
);

INSERT INTO example_table(id, q1, q1_neg, q1_empty, q2, q2_neg, q2_empty, result) VALUES
 (1, 1, FALSE, FALSE, 1, FALSE, FALSE, 'A'),
 (1, 1, FALSE, FALSE, 2, FALSE, FALSE, 'A'),
 (2, 1, FALSE, FALSE, 3, FALSE, FALSE, 'B'),
 (3, 1, FALSE, FALSE, 4, FALSE, FALSE, 'C'),
 (4, 1, FALSE, FALSE, 34, FALSE, FALSE, 'D'),
 (5, 1,  TRUE, FALSE, 0 , FALSE, TRUE, 'E');

该方案能返回正确结果,但数据结构过宽,当问题数量达到20-30个时,表字段会急剧膨胀,维护性差,现寻求更高效、合理的数据结构与查询组合方案。


内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:25:35