0

好的,所以我有一个包含多个表的 MySQL 数据库。其中一张表(表 A)包含我最感兴趣的项目。

它有一个名为的列type和一个名为 的列entity_id。主键是一个叫做 的东西registration_id,目前它或多或少与我无关。

最终,我想收集一个特定的所有项目type,但它们有一个独特的entity_id。唯一的问题是entity_id在表 A 中不是唯一键。可以有多个registration_idsper entity_id

现在,还有另一个表(表 B),它只有一个唯一列表entity_ids(即,它是该表上的主键),但是该表中没有信息type

那么对于这两个表,获取我想要的数据的最佳方法是什么?

我正在考虑某种方式(DISTINCT),我可以在第一个表上单独使用,或者可能是表 A 和表 B 之间的某种连接(我对连接的概念仍然相对较新),结合entity_id来自表 B 和type来自表 A。

目前最有效的数据库操作是什么?我应该(最终,不是现在,因为我根本没有时间,可悲的是)更改数据库结构以提高效率吗?

如果有人需要任何其他信息或图形,请告诉我。

4

3 回答 3

2

如果我理解正确,您可以使用GROUP BY

SELECT entity_id
  FROM table1
 WHERE type = ?
 GROUP BY entity_id

或者DISTINCT

SELECT DISTINCT entity_id
  FROM table1
 WHERE type = ?

这是SQLFiddle演示

于 2013-08-12T00:48:16.560 回答
1

表连接是一项昂贵的操作。如果您正在处理大型数据集,那么执行连接操作所需的时间是不可忽略的。

以下 SQL 语句将获取所有 entity_id 并按类型对它们进行分组。因此,对于每个 entity_id,结果集中只有每种类型的 1 个:

SELECT type, entity_id FROM TableA GROUP BY type, entity_id;
于 2013-08-12T01:01:12.377 回答
0

我想这就是你要找的。试试这个给你只有一个(唯一的)entity_id 的类型。

选择类型,计数(实体 ID)
  从表 1
按类型分组
有 COUNT(entity_id)=1

这是SQL 小提琴

于 2013-08-12T00:57:36.797 回答