MySQL连接和列名称

时间:2013-02-11 19:45:46

标签: mysql sql database join

假设我的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,那将是理想的,但是现在,我只想要在输出中重命名一列的方法。或者以表名为前缀。或类似的东西。

可行?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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