我有一个关于在SQLite中选择的问题。我在DB中输入了条目,我需要选择符合我标准的所有行。这些标准可以与AND,OR或NOT结合使用。
例如,我有
id | image | tag
-----|---------|------
21 | 21 | 35
25 | 240 | 45
36 | 21 | 40
43 | 155 | 35
56 | 243 | 35
65 | 312 | 40
作为我的数据库中的数据。
我现在要做的是搜索带有标签35的所有条目的示例。到目前为止这么简单(简单的SELECT查询)。 这给了我 21 , 155 和 243 的图片。
但是现在,我想要每个带有标签35的条目,但只有那些标签为40的条目。这将是 AND 约束。
除了 AND 约束之外,我还想搜索标签为35的条目,但也要搜索标签为40的条目( OR 约束)。
此外,我想要排除一些带有 NOT 约束的条目。例如,我希望每个条目都带有标签35,但不是带有标签40的条目。
如何使用SQLite查询实现此目的?我知道,如何在条目中搜索多个条件,但我此时不知道如何使用此约束搜索多个条目。我可以通过选择两个不同的列表来解决这个问题,然后将交叉, union 或除了之外。但我认为,必须有更好,更直接的方式。
我希望,这个目标可以实现,而无需编写包含数千个sql语句的可怕长查询。 ;)
有人知道,如何搜索上述条目?
提前感谢您的帮助
亲切的问候 Ramon的
(请保留我的一些英语错误;这是免费的;)
答案 0 :(得分:0)
使用复合查询是最简单的解决方案:
SELECT image FROM data WHERE tag = 35
INTERSECT
SELECT image FROM data WHERE tag = 40;
SELECT image FROM data WHERE tag = 35
UNION
SELECT image FROM data WHERE tag = 40;
SELECT image FROM data WHERE tag = 35
EXCEPT
SELECT image FROM data WHERE tag = 40;
也可以使用correlated subqueries:
标签为35的所有条目都存在具有相同图像和标记40的行:
SELECT *
FROM data
WHERE tag = 35
AND EXISTS (SELECT *
FROM data AS d2
WHERE d2.image = data.image
AND d2.tag = 40);
没有什么复杂的:
SELECT DISTINCT image
FROM data
WHERE tag IN (35, 40);
标签为35的所有条目都不存在具有相同图像和标签40的行:
SELECT *
FROM data
WHERE tag = 35
AND NOT EXISTS (SELECT *
FROM data AS d2
WHERE d2.image = data.image
AND d2.tag = 40);