在我的 MySQL 数据库中,我有一个products
表格
id | type | name | weight | base_price | [...]
whereid
是主键,type
是ENUM('personal','industrial')
. 个人和工业产品都在products_personal
和products_industrial
表中存储了一些附加信息。两者都是形式
pid | additional info [...]
pid
外键在哪里和products.id
的附加信息不同。在我的表中,我有两个函数(通过)和. 这些函数使用和一些附加信息来计算最终价格。products_personal
products_industrial
CREATE FUNCTION
PRICE_PERSONAL(...)
PRICE_INDUSTRIAL(...)
base_price
我希望为id | type | name | [...] | price
我的所有产品创建一个视图。我现在的候选人是
CREATE VIEW foo AS
SELECT id, type, name, [...], PRICE_PERSONAL(params) AS price
FROM products
INNER JOIN products_personal ON products.id = products_personal.pid
UNION
SELECT id, type, name, [...], PRICE_INDUSTRIAL(params) AS price
FROM products
INNER JOIN products_industrial ON products.id = products_industrial.pid
但这很笨重,似乎会导致性能不佳ORDER BY
(因为它需要对未索引的UNION
结果进行排序)。
是否有更简洁的表或查询结构来完成此类查询?