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

MySQL查询跨多行查找匹配项

徐涵亮
2023-03-14
问题内容

我有两个表,Data(Name, dataID)并且Attributes(Name, attributeID, dataID)具有一对多关系。一个dataID可能与许多相关联attributeID

我想做的是运行一个查询,该查询查找具有特定的attributeID集合的所有dataID。我不能:

SELECT dataID
FROM Attributes
WHERE dataID = 1 AND (attributeID = 1 OR attributeID = 2 OR attributeID = 3);

那将使用那些属性中的任何一个来获取所有的dataID,我想要具有所有这些属性的dataID。

有什么建议吗?

仍然使用比基本选择更多的查询来解决问题。


问题答案:

由于您需要读取Attributes表的三个不同行,因此建议使用JOIN来避免子查询。

SELECT a1.dataID
FROM
    Attributes a1
    JOIN Attributes a2 ON
        a1.dataID=a2.dataID
    JOIN Attributes a3 ON
        a2.dataID=a3.dataID
WHERE
    a1.dataID = 1 AND
    a1.attributeID = 1 AND
    a2.attributeID = 2 AND
    a3.attributeID = 3;


 类似资料:
  • 问题内容: 如果我有一个看起来像这样的表: 还有一个THINGS表,如下所示: 我正在尝试提出一个纯SQL查询,该查询可以让我找出什么可以访问什么。基本上,我想要一个看起来像这样的查询: 并返回“ John”和“ Mary”。关键是访问事物所需的许可数量是任意的。 我觉得这应该很明显,但是我无法提出一个优雅的解决方案。首选与Oracle兼容的解决方案。 编辑: Kosta和JBrooks的解决方案

  • 问题内容: 我有一个名为“ acts”的表,该表具有3个被索引在一起的列: 在表格中,一行有一个名为“红色暴动”的行为 当我执行以下搜索时,结果中会出现红色暴动: 但是,如果我对此进行扩展并搜索,则不会返回任何结果: 这是为什么?有没有更好的方法在查询中使用通配符? 我尝试更改为,但这在任一查询上均未返回任何结果。 问题答案: 值“ re”是MATCH()搜索的停用词。 http://dev.my

  • 本文向大家介绍MySQL查询找到匹配项并获取记录,包括了MySQL查询找到匹配项并获取记录的使用技巧和注意事项,需要的朋友参考一下 要从记录中查找匹配项,请使用MySQL 。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是查找与ID 1和11匹配并获取记录的查询- 这将产生以下输出-

  • 问题内容: 通常,在使用SELECT查询数据库时,通常希望查找与给定搜索字符串匹配的记录。 例如: 该查询应为我提供所有记录,其中“ Bob Smith”出现在名称字段中的任何位置。 我想做的是相反的。 我想查找名称字段在“ Robert Bob Smith III,PhD。”(查询的字符串参数)中的所有记录,而不是查找在名称字段中具有“ Bob Smith”的所有记录。 问题答案: 只是转一下喜

  • 问题内容: 我有这样的桌子设计 并希望通过查询返回属于部门a和b的所有person_id。我认为这可能与 但不能完全弄清楚。有人知道我该怎么做吗? 编辑:我想我可以执行以下操作。但这似乎是一种hack。 问题答案: 注意:仅当一个人可以多次成为同一部门的成员时,才需要使用DISTINCT。

  • 问题内容: 范例: 在此表中,我需要获得Empid 1作为输出。因为它的bookid 8不止一次。 提前致谢.. 问题答案: 您可以使用: 但这会给您重复的内容。例如,如果您有1-8,1-8,1-9,1-9,则会得到1,1的输出,因为Empid 1具有两个不同bookid值的重复bookid。您将需要使用来过滤出重复的Empid。