【问题标题】:MySQL join and column namesMySQL 连接和列名
【发布时间】:2013-02-11 19:45:46
【问题描述】:

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

可行吗?

【问题讨论】:

  • 你能提供测试数据和想要的结果吗?

标签: mysql sql database join


【解决方案1】:

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

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

此外,表别名使此类查询更具可读性。

【讨论】:

  • 哈,就这么简单。我承认,我不懂 SQL,我只在必要时才使用它。感谢您的回答。
  • @AlW 。 . .您的问题似乎来自没有太多经验的人。不幸的是,我认为,人们倾向于自动对此类问题投反对票,而不是意识到所涉及的学习曲线。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2016-10-08
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多