如何为与其他字段名称相同的字段创建别名?

如何为与其他字段名称相同的字段创建别名?

问题描述:

我不知道如何提出问题。 这里的例子:如何为与其他字段名称相同的字段创建别名?

category

id_category 
id_main_category 
title_category 

内容的是:

  • id_category :1 | id_main_category :0 | title_category : Man
  • id_category :2 | id_main_category :0 | title_category : Woman
  • id_category :3 | id_main_category :1 | title_category : Wallet
  • id_category :4 | id_main_category :1 | title_category : Shoe
  • id_category :5 | id_main_category :2 | title_category : Dress

id_main_category = id_category

与id_main_category = 0的每个字段是一个MainCategory,另一个是其它字段的在其id_main_category引用id_category一个子类别。

所以,曼(id_category 1)是MainCategory和它有2个子目录:

  • 电子钱包(id_category 3)
  • 鞋(id_category 4)

我想选择*从类别也maincategory的标题和打印为:

  • 女人
  • 钱包(MAN)
  • 擦鞋(人)
  • 连衣裙(女)

的问题是:如何选择和的title_category创建别名mainCategory,如: SELECT *, title_category as title_main_category FROM category WHERE id_main_category = id_category.

谢谢

为此,您需要一个JOIN,因为您实际上将不同的行合并为一个。这应该做的伎俩

SELECT * FROM `category` AS `a` 
LEFT JOIN `category` AS `b` 
ON `a`.`id_main_category` = `b`.`id_category` 

注意:您应该设置id_main_categoryNULL,如果它是一个“根”类别。 0是一个有效的ID,因此您不应该根据此任意值区分根/子。尽管如此,您可能必须将列更改为允许空值。

+0

我插入另一场id_category = 0,并将其命名为主要类别。 –

+0

啊。如果您实际上使用“主类别”作为所有其他类别的类别,那完全没问题。但是,如果你插入的只是为了能够选择“根”类别,这是不好的做法,可能会导致你后来的问题。 – giorgio

这会给你你想要的确切结果。

SELECT CONCAT(a.title_category,'(',IFNULL(b.title_category,''),')') 
FROM category a LEFT JOIN category b ON a.id_main_category = b.id_category ; 

希望这对我有所帮助。我已经使用self join,b类在这里就像父类别表一样。

正如@giorgio所说。

SELECT *, a.`title_category` AS 'title_main_category' FROM 
`category` AS `a` 
LEFT JOIN `category` AS `b` 
ON `b`.`id_main_category` = `a`.`id_category` 

谢谢