有没有一种简单的方法来执行多个 AND 语句,就像 IN 子句对 OR 所做的那样?
3 回答
0
您希望使用 ALL 关键字吗?
于 2011-12-09T19:37:00.680 回答
0
一般情况下是不可能的,
一列只能存储一个值,
你不会有这种情况status = 1 AND status =2
例外情况是set data type
于 2011-12-09T19:39:14.167 回答
0
这是 Stack Overflow 上的一个常见问题,我正在为其创建一个新标签,sql-match-all
. 我会回去尝试标记一些与此问题相关的旧答案。
根据您的简要描述,我假设您的意思是要返回与所有一组值匹配的一组行,例如标记的文章(php、mysql、性能)。谓词不要求所有三个标签都匹配,但给定的IN()
数据行只有一个标签,WHERE 子句一次只能测试一行。
这个问题有两种流行的解决方案。首先是计算行组中有多少不同的标签,如果它等于您要匹配的标签列表,则通过测试。
SELECT t.article
FROM Tags t
WHERE t.tag IN ('php', 'mysql', 'performance')
GROUP BY t.article
HAVING COUNT(DISTINCT tag) = 3;
另一种解决方案是自行加入与您要查找的标签数量一样多的次数。通过使用 INNER JOIN,您可以将结果集限制为仅匹配的那些组。
SELECT t1.article
FROM Tags t1
INNER JOIN Tags t2 USING (article)
INNER JOIN Tags t3 USING (article)
WHERE (t1.tag, t2.tag, t3.tag) = ('php', 'mysql', 'performance');
哪种解决方案更好取决于您想要匹配的标签数量、在您的应用程序中构建此查询的便利程度,以及您的 RDBMS 品牌擅长的特定优化。例如,后一种解决方案在 MySQL 中通常要快得多,因为 MySQL 倾向于为 GROUP BY 查询编写临时表。但是您应该在数据库中测试这两种查询类型以确保。
于 2011-12-09T19:50:14.420 回答