我正在尝试将“简化”的 sql 查询转换为可用于 XnViews 数据库的有效 SQLite 查询,这意味着数据库布局对于我正在尝试做的事情来说充其量是次优的,而且我对此无能为力。
例如“(cat_10 and cat_12) and (cat_5 or cat_7)”。
这应该用于表“t3”,该表具有字段“if”(fileID)和“ic”(categoryID)。
条目如下所示:
if, ic
7, 10
7, 12
7, 4
9, 10
9, 12
9, 5
10, 10
10, 12
10, 7
上面的简化查询应该只选择文件 9 和 10,因为 7 确实具有所需的类别 10 和 12,但既没有 5 也没有 7。
现在的实际问题是构建一个查询语句的地狱,因为我已经花了几个小时来简单地在两个类别之间进行 AND 工作。
SELECT if FROM t3 WHERE ic IN (10, 12) GROUP BY if HAVING count(if) = 2
这给了我所有包含类别 10 和 12 的文件 ID,但我不知道我应该如何将其与剩余的“和(cat_5 或 cat_7)”结合起来。
当我计划这些简化的 sql 语句(由 html 和 js 中的 click-it-together-builder 生成)时,我打算简单地将“cat_5”替换为“t3.ic = 5”,其余部分保持原样。
当然,我没有预见到它不能作为一个整体检查条目的地方,并且不能有 ic = 5 和 ic = 7。这几乎破坏了一切。
所以我想知道是否有人知道我如何将这些简单的查询翻译成实际工作的查询,请记住它可能不限于( x 和 y )对。
编辑:我想出了如何做我给出的例子,我认为至少:
SELECT if FROM t3 WHERE ic IN (10, 12) GROUP BY if HAVING count(if) = 2
INTERSECT
SELECT if FROM t3 WHERE ic IN (5, 7) GROUP BY if
但现在的主要问题是以正确的顺序解决 ( ) 。
编辑 2:我想我正在尝试使用 group_concat() 将类别分组到一个字段中,然后我应该能够简单地对猫 LIKE "" AND 这将是我可以轻松拼凑在一起的小块,然后只是括号它应该可以工作。突出“应该”。