我有许多表格可以在我的数据库中存储不同的产品类型(这些产品有重叠的列,但也有一些产品特有的列)。产品与制造商(其详细信息存储在他们自己的表中)和类别相关联。我需要编写一个select语句,它将获取多个表中的所有产品以及制造商详细信息和类别详细信息(因此我可以显示长形式制造商和类别名称)。示例表格如下:
product_table1:
product_id,
manufacturer_id,
category_id,
product_name,
...
product_table2:
product_id,
manufacturer_id,
category_id,
product_name,
...
category_table:
category_id,
category_name
...
manufacturer_table:
manufacturer_id,
manufacturer_name
...
我需要(使用所有产品表中的行):
manufacturer_id,
category_id,
product_name,
... other product columns common to all product tables
... I can hard code these if necessary, they don't have
... to be worked out
manufacturer_name,
category_name
我愿意考虑架构更改,尽管不是将所有产品存储在单个表中的选项(只有太多列,而MySQL可以处理它,维护和理解它会变得困难)。
我知道我可以通过多次选择来做到这一点,但我真的不愿意这样做。此外,不能将公共列拉出到自己的表中。还有其他级别的复杂性。
答案 0 :(得分:1)
这是一种方法,虽然它可能有效率问题:
SELECT all_products.manufacturer_id, all_products.category_id, all_products.product_name, manufacturer.manufacturer_name, category.category_name
FROM manufacturer
JOIN
(
SELECT manufacturer_id, category_id, product_name
FROM product_table1
UNION ALL
SELECT manufacturer_id, category_id, product_name
FROM product_table2
) AS all_products ON all_products.manufacturer_id = manufacturer.manufacturer_id
JOIN category ON category.category_id = all_products.category_id