我在數據庫中的這些表:MySQL實體和實體的別名:如何刪除UNION?
- 實體(ID,姓名,刪除)
- entities_aliases(ENTITY_ID,alias_id)
- 別名(ID,姓名)
這個查詢是工作正常,但由於UNION緩慢,請注意entities.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會變得越來越慢。我如何擺脫聯盟?
加: 我需要的輸出。例如,我們有實體1-AAA和他的別名1-BBB和2-CCC。輸出應該是:
- AAA
- BBB(AAA)
- CCC(AAA)
使用左連接。 – usr
如果您確定'entities.name'對於給定的'entity_id'總是不同於'ANY(aliases.name)',請使用'UNION ALL'。 – vyegorov
我想問一下你期望從這個查詢中得到的輸出是什麼,這個輸出給你帶來了使用union的想法?不能說什麼適當的查詢可能是一個替代這一個雖然因爲我們不知道你期望實現什麼結果請進一步解釋你想要的結果的邏輯 –