我有三个控制产品、颜色和尺寸的表。产品可以有或没有颜色和尺寸。颜色可以有大小,也可以没有。
product color size
------- ------- -------
id id id
unique_id id_product (FK from product) id_product (FK from version)
stock unique_id id_version (FK from version)
title stock unique_id
stock
该unique_id
列存在于所有表中,是串行类型(自动增量),其计数器与三个表共享,基本上它作为它们之间的全局唯一 ID。
它工作正常,但是当我必须选择一些基于unique_id
.
因为我不知道我在哪里unique_id
寻找,我正在使用UNION
,如下所示:
select title, stock
from product
where unique_id = 10
UNION
select p.title, c.stock
from color c
join product p on c.id_product = p.id
where c.unique_id = 10
UNION
select p.title, s.stock
from size s
join product p on s.id_product = p.id
where s.unique_id = 10;
有一个更好的方法吗?感谢您的任何建议!
编辑 1
基于@ErwinBrandstetter 和@ErikE 的回答,我决定使用以下查询。主要原因是:
1)由于unique_id
所有表中都有索引,我将获得良好的性能
2)使用unique_id
我会找到产品代码,所以我可以使用另一个简单的连接来获取我需要的所有列
SELECT
p.title,
ps.stock
FROM (
select id as id_product, stock
from product
where unique_id = 10
UNION
select id_product, stock
from color
where unique_id = 10
UNION
select id_product, stock
from size
where unique_id = 10
) AS ps
JOIN product p ON ps.id_product = p.id;