Select SQLite 中的多个条目,其中多行需要匹配相同的条件(包括 AND、OR 和 NOT)
Select multiple entries in SQLite where multiple rows need to match the same condition (including AND, OR and NOT)
我对 SQLite 中的 selecting 有疑问。我在数据库中给出了条目,我需要 select 所有符合我的标准的行。这些条件可以与 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 约束。
- 这只会导致 21
除了 AND 约束之外,我还想搜索标签为 35 的条目,但也搜索标签为40(OR 约束)。
- 这应该导致图像 21、155、243 和 312
此外,我想排除一些带有 NOT 约束的条目。例如,我想要每个带有标签 35 的条目,但不是带有标签 40 的条目。
- 这将是图像 155 和 243
如何使用 SQLite 查询实现此目的?我知道如何在条目内搜索多个条件,但我现在不知道如何使用此约束搜索多个条目。我可以通过 selecting 两个不同的列表,然后 intersect、union 或 except[=65 来解决这个问题=] 他们彼此。但是我觉得,一定有更好更直接的方法。
我希望可以实现这个目标,而无需编写包含数千个 sql 语句的长得可怕的查询。 ;)
有人知道如何搜索上述条目吗?
提前感谢您的帮助
亲切的问候
拉蒙
(请保留我的一些英文错误;有免费的;))
使用复合查询是最简单的解决方案:
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);
我对 SQLite 中的 selecting 有疑问。我在数据库中给出了条目,我需要 select 所有符合我的标准的行。这些条件可以与 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 约束。
- 这只会导致 21
除了 AND 约束之外,我还想搜索标签为 35 的条目,但也搜索标签为40(OR 约束)。
- 这应该导致图像 21、155、243 和 312
此外,我想排除一些带有 NOT 约束的条目。例如,我想要每个带有标签 35 的条目,但不是带有标签 40 的条目。
- 这将是图像 155 和 243
如何使用 SQLite 查询实现此目的?我知道如何在条目内搜索多个条件,但我现在不知道如何使用此约束搜索多个条目。我可以通过 selecting 两个不同的列表,然后 intersect、union 或 except[=65 来解决这个问题=] 他们彼此。但是我觉得,一定有更好更直接的方法。
我希望可以实现这个目标,而无需编写包含数千个 sql 语句的长得可怕的查询。 ;)
有人知道如何搜索上述条目吗?
提前感谢您的帮助
亲切的问候 拉蒙
(请保留我的一些英文错误;有免费的;))
使用复合查询是最简单的解决方案:
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);