【问题标题】:is there a mysql clause for multiple and statements like IN?是否有用于多个和语句的 mysql 子句,如 IN?
【发布时间】:2012-01-17 01:20:38
【问题描述】:

有没有一种简单的方法来执行多个 AND 语句,就像 IN 子句对 OR 所做的那样?

【问题讨论】:

  • 你能举个例子说明你想做什么吗?
  • 设置排除项时,NOT IN () 在技术上是AND 操作的字符串,而不是OR 操作...
  • 是的,第二个乔纳森的;如果您向我们描述您想要实现的目标,将会有所帮助。也许还有其他方法可以满足您的需求,并且拥有表结构、示例数据、示例预期输出以及描述目标的最佳方式会大有帮助...

标签: php mysql sql-match-all


【解决方案1】:

一般情况下是不可能的,
一列只能存储一个值,
status = 1 AND status =2时你不会有情况

例外情况是set data type

【讨论】:

    【解决方案2】:

    【讨论】:

    • 在 MySQL 中,ALL 仅在您使用子查询获取值时才有效,因此它与 IN 并不完全相同
    【解决方案3】:

    这是 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 查询编写临时表。但是您应该在数据库中测试这两种查询类型以确保。

    【讨论】:

    • 我建议为您的新标签创建一个标签 wiki。列出一些更常见的形式将是一个有用的地方......
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2016-08-14
    • 2014-07-07
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多