1

假设我的 MySQL 数据库中有以下表:

TABLE Products
| id | some_column1 | some_column2 |

TABLE ProductProperties
| id | product_id | name |

过于简单,但足够了。现在我想获得所有具有属性的产品。我愿意:

SELECT * FROM `Products` JOIN `ProductProperties` ON Products.id = ProductProperties.product_id

我能得到什么?

| id | some_column1 | some_column2 | id | product_id | name |

这并不酷,我想通过以下两种方式之一让它变得酷:

1) 获取像 Product 表中的对象数组,但又扩展了一个成员,这将是匹配 JOIN 的属性数组。我已经想通了,这是不可能的?

2)要获得这样的数组(我仍然必须在 PHP 中对其进行迭代,以将一个产品中的所有属性连接到一个对象中):

| product_id | some_column1 | some_column2 | property_id | product_id | name |

所以我想将列 ProductProperties.id 重命名为 ProductProperties.property_id。如果我也可以从输出中删除 ProductProperties.product_id ,那将是理想的,但现在,我只想重命名输出中的一列。或者用表名作为前缀。或类似的东西。

可行吗?

4

2 回答 2

4

您应该明确命名列而不是使用*. 然后,不要返回多余的列:

SELECT p.id as productid, p.some_column1, p.some_column2,
       pp.id  as ProductPropertiesId, pp.name
FROM `Products` p JOIN `ProductProperties` pp
    ON p.id = pp.product_id

此外,表别名使这样的查询更具可读性。

于 2013-02-11T19:49:30.453 回答
2
SELECT Products.id product_id,
       Products.some_column1,
       Products.some_column2,
       ProductProperties.id property_id,
       ProductProperties.name
FROM `Products` 
JOIN `ProductProperties` 
ON Products.id = ProductProperties.product_id
于 2013-02-11T19:52:27.017 回答