好的,所以我有一个包含多个表的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
相结合。
目前最有效的数据库操作是什么?我应该(最终,不是现在,因为我根本没有时间,遗憾地)改变数据库结构以提高效率?
如果有人需要任何其他信息或图片,请与我们联系。
答案 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