如何为与其他字段名称相同的字段创建别名?
问题描述:
我不知道如何提出问题。 这里的例子:如何为与其他字段名称相同的字段创建别名?
表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_category
到NULL
,如果它是一个“根”类别。 0
是一个有效的ID,因此您不应该根据此任意值区分根/子。尽管如此,您可能必须将列更改为允许空值。
答
这会给你你想要的确切结果。
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`
谢谢
我插入另一场id_category = 0,并将其命名为主要类别。 –
啊。如果您实际上使用“主类别”作为所有其他类别的类别,那完全没问题。但是,如果你插入的只是为了能够选择“根”类别,这是不好的做法,可能会导致你后来的问题。 – giorgio