我在数据库中有这些表:
- 实体(ID、名称、已删除)
- 实体别名(实体 ID,别名 ID)
- 别名(ID,名称)
此查询工作正常,但由于 UNION 很慢,请注意 entity.name 如何与 aliases.name 交换并移至最后一列:
SELECT entities.id, entities.name, entities.deleted, NULL AS main_name
FROM entities
UNION
SELECT entities.id, aliases.name, entities.deleted, entities.name AS main_name
FROM entities
JOIN entities_aliases ON entities_aliases.entity_id = entities.id
JOIN aliases ON entities_aliases.alias_id = aliases.id
ORDER BY name
这种交换对我来说非常重要,我无法删除它,但是随着数据库在宽度(更多字段和链接)和深度(更多记录)方面的发展,UNION 会变得越来越慢。我怎样才能摆脱 UNION?
补充: 我需要的输出。例如,我们有实体 1-AAA 和他的别名 1-BBB 和 2-CCC。输出应该是:
- AAA
- BBB (AAA)
- CCC (AAA)