纠正数据库操作以获取所需的数据

时间:2013-08-12 00:43:36

标签: mysql database

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

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

最终,我想收集特定type的所有项目,但这些项目具有唯一的entity_id。唯一的问题是表A中的entity_id不是唯一键。每个registration_ids可能有多个entity_id

现在,还有另一个表(表B),它只有一个唯一的entity_ids列表(也就是说,它是该表的主键),但是没有关于type的信息。那张桌子。

因此,使用这两个表,获取所需数据的最佳方法是什么?

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

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

如果有人需要任何其他信息或图片,请与我们联系。

3 个答案:

答案 0 :(得分:2)

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

SELECT entity_id
  FROM table1
 WHERE type = ?
 GROUP BY entity_id

DISTINCT

SELECT DISTINCT entity_id
  FROM table1
 WHERE type = ?

这是 SQLFiddle 演示

答案 1 :(得分:1)

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

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

SELECT type, entity_id FROM TableA GROUP BY type, entity_id;

答案 2 :(得分:0)

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

SELECT type , count(entity_id)
  FROM table1
GROUP BY type
HAVING COUNT(entity_id)=1

以下是SQL Fiddle