Mysql在具有连接的多个表中选择

时间:2011-01-24 23:55:37

标签: mysql

我有许多表格可以在我的数据库中存储不同的产品类型(这些产品有重叠的列,但也有一些产品特有的列)。产品与制造商(其详细信息存储在他们自己的表中)和类别相关联。我需要编写一个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可以处理它,维护和理解它会变得困难)。

我知道我可以通过多次选择来做到这一点,但我真的不愿意这样做。此外,不能将公共列拉出到自己的表中。还有其他级别的复杂性。

1 个答案:

答案 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