MySQL:左连接和列在不同的表中具有相同的名称?

时间:2012-05-10 08:31:28

标签: mysql

SELECT * FROM `product` left join category on product.category_id = category.id

此查询正常。但问题是,产品表和类别表都有名为“name”和“id”的字段。因此,当我获取此查询的结果时,它只给我一个名称和一个id,但我想要id和name。

如何在不重命名字段的情况下执行此操作? 是否可以使用自定义名称返回,例如product_name和category_name?

6 个答案:

答案 0 :(得分:6)

您可以在字段中添加别名:

SELECT
    a.id,
    a.name,
    a.category_id,
    b.id AS catId,
    b.name AS catName
FROM
    product AS a
LEFT JOIN
    category AS b ON a.category_id = b.category.id

答案 1 :(得分:5)

使用“AS”关键字,如

SELECT product.id AS pid, category.id AS cid ... FROM `product` left join category on product.category_id = category.id

答案 2 :(得分:3)

将别名与AS关键字一起使用:

SELECT p.id AS product_id, p.name AS product_name, c.id AS cat_id, c.name AS cat_name
FROM `product` AS p
LEFT JOIN category AS c ON p.category_id = c.id

答案 3 :(得分:2)

SELECT p.*,c.* FROM product p LEFT JOIN category c on p.category_id = c.id;

答案 4 :(得分:2)

试试这个:

SELECT product.id AS productid, 
       category.id AS categoryid, ...
FROM `product` left join category 
       on product.category_id = category.id

答案 5 :(得分:0)

我在Node.js项目中使用MySQL时遇到了类似的问题。

我发现如果您仍想使用select *而不是列出所有列并使用别名,则以下方法有效:

SELECT *, category.id AS cId, category.name AS cName 
FROM product LEFT JOIN category ON product.category_id = category.id

换句话说,只需为具有冲突名称的联接列创建别名。您不需要在其他列或表名上使用别名。