当前位置: 首页 > 面试题库 >

MySQL中是否有类似IN的东西,但是使用AND而不是OR?

衡翰翮
2023-03-14
问题内容

我需要一条SQL语句来检索键(或任何列)在关联表中的记录,例如:

documentId termId
4             1
4             2
3             3
5             1

这:

SELECT documentId 
  FROM table 
 WHERE termId IN (1,2,3)

…将检索documentid值为termid1 2 3的任何值。

有没有这样的事,但返回documentid其中的值termid值是1 2 3?像一个IN,但带有AND。


问题答案:

没有直接的功能,但是有两个选项:

使用GROUP BY / HAVING

  SELECT t.documentid
    FROM TABLE t
   WHERE t.termid IN (1,2,3)
GROUP BY t.documentid
  HAVING COUNT(DISINCT t.termid) = 3

注意事项是您必须使用,HAVING COUNT(DISTINCT因为对于相同的documentid,termid的重复为2将会是误报。并且COUNT必须等于IN子句中的termid值的数量。

使用联接

SELECT t.documentid
  FROM TABLE t
  JOIN TABLE x ON x.termid = t.termid
              AND x.termid = 1
  JOIN TABLE y ON y.termid = t.termid
              AND y.termid = 2
  JOIN TABLE z ON z.termid = t.termid
              AND z.termid = 3

但是,这对于处理变化很大的标准可能会很痛苦。



 类似资料:
  • 问题内容: 我从来没有见过这样的声明,它是否存在于Java世界中? 问题答案: Java的版本是-它创建指定类型的新对象。 在Java中,内存是为您管理的,因此您不能显式或对象。

  • 问题内容: 是否有与Java或JVM语言的Python virtualenv类似的东西? 问题答案: 据我了解,virtualenv使您能够拥有单独的库安装路径,从而有效地分隔“虚拟” Python安装。 Java没有“系统范围内已安装”库(*)的概念:它总是在类路径中搜索要加载的库。由于可以为每个应用程序定义类路径(并且需要将其定义!),因此每个应用程序都可以选择要加载的库和版本。 如果您更深入

  • 问题内容: 开始使用C#学习LINQ。 尤其是LINQ to Objects和LINQ to XML。 我真的很喜欢LINQ的强大功能。 我了解到有一种叫做JLINQ的JavaScript实现。 此外(如Catbert所言),Scala将具有LINQ 您知道LINQ或类似的东西是否将成为Java 7的一部分吗? 更新:2008年的有趣帖子-LINQ forJava工具 问题答案: 看一下Scala

  • 问题内容: 在C#中,您可以将一个类标记为,以便只能从同一包中对其进行访问。Java有什么类似的东西吗? 问题答案: 您可以通过从类的声明中省略安全修饰符(公共,私有)来创建程序包专用类。

  • 问题内容: Java中是否有类似.NET的东西? 问题答案: 下议院郎有它。或者你可以扔一个。

  • 问题内容: 是否有类似C#/。NET的东西 在Java中? 问题答案: 编辑:作为Java 8,这可能与 在Java8之前: Java中没有这样的东西, 但是您可以有如下内容: 例如,您可以通过以下方式使用Range: 另外,如果您不喜欢直接使用,则可以使用工厂类: 这是我们的工厂测试: 我希望这些会有用:)