MySQL - 在SELECT中的IF

时间:2016-09-12 13:04:41

标签: mysql

我有以下MySQL查询:

SELECT id, name, parent_id AS pID, 

(SELECT parent_id
FROM category
WHERE id = pID)
AS grandparent_id, 

(SELECT parent_id
FROM category
WHERE id = grandparent_id) 
AS greatgrandparent_id, 

(SELECT name
FROM category
WHERE id = pID)
AS parent, 

(SELECT name
FROM category
WHERE id = grandparent_id)
AS grandparent, 

(SELECT name
FROM category
WHERE id = greatgrandparent_id)
AS greatgrandparent

FROM category
WHERE active = '1'
HAVING grandparent IS NOT NULL
ORDER BY grandparent_id, parent_id, sort, id ASC 

greatgrandparent IS为NULL时,我希望它显示grandparent值。这可能吗?

我已经尝试了CASE WHEN,但必须在某处犯错,因为它一直在抛出错误。

4 个答案:

答案 0 :(得分:0)

简单解决方案:IFNULL(greatgrandparent, grandparent)

答案 1 :(得分:0)

如果没有分组子句,则不能拥有拥有子句。

答案 2 :(得分:0)

可能是这段代码可以帮助你。

SELECT id,name,parent_id AS pID, 当祖父母不是NULL时的情况 (SELECT parent_id FROM category WHERE id = grandparent_id) 其他 (SELECT parent_id FROM category WHERE id = pID)
结束为_parent_id, 当祖父母不是NULL时的情况 (SELECT name FROM category WHERE id = grandparent_id) 其他 (SELECT名称FROM类别WHERE id = pID) 结束AS _parent_name     FROM类别WHERE active =' 1'
    ORDER BY grandparent_id,parent_id,sort,id ASC

答案 3 :(得分:0)

我会使用带有别名和合并的左连接来重写它。 鉴于此

/*
CREATE TABLE CATEGORY(ID INT, NAME VARCHAR(20), PARENT_ID INT);
TRUNCATE TABLE CATEGORY;
INSERT INTO CATEGORY VALUES
(1,'AAAA',2),(2,'AAA',3),(3,'AA',4),(4,'A',5),
(10,'BBBB',11),(11,'BBB',12)
;

*/

此代码

SELECT  C.ID,C.NAME,C.PARENT_ID ,
            CP.NAME AS PARENTNAME,CP.PARENT_ID AS PARENT_PARENT_ID,
            CG.NAME AS GRANDPARENTNAME,
            CG.PARENT_ID AS GRANDPARENT_PARENT_ID,
            CGG.NAME AS GREATGRANDPARENTNAME ,
            CGG.PARENT_ID AS GREATGRANDPARENT_PARENT_ID
FROM        CATEGORY C
LEFT JOIN   CATEGORY CP ON CP.ID = C.PARENT_ID
LEFT JOIN   CATEGORY CG ON CG.ID = CP.PARENT_ID
LEFT JOIN   CATEGORY CGG ON CGG.ID = CG.PARENT_ID
ORDER BY C.ID;

结果

+------+------+-----------+------------+------------------+-----------------+-----------------------+----------------------+----------------------------+
| ID   | NAME | PARENT_ID | PARENTNAME | PARENT_PARENT_ID | GRANDPARENTNAME | GRANDPARENT_PARENT_ID | GREATGRANDPARENTNAME | GREATGRANDPARENT_PARENT_ID |
+------+------+-----------+------------+------------------+-----------------+-----------------------+----------------------+----------------------------+
|    1 | AAAA |         2 | AAA        |                3 | AA              |                     4 | A                    |                          5 |
|    2 | AAA  |         3 | AA         |                4 | A               |                     5 | NULL                 |                       NULL |
|    3 | AA   |         4 | A          |                5 | NULL            |                  NULL | NULL                 |                       NULL |
|    4 | A    |         5 | NULL       |             NULL | NULL            |                  NULL | NULL                 |                       NULL |
|   10 | BBBB |        11 | BBB        |               12 | NULL            |                  NULL | NULL                 |                       NULL |
|   11 | BBB  |        12 | NULL       |             NULL | NULL            |                  NULL | NULL                 |                       NULL |
+------+------+-----------+------------+------------------+-----------------+-----------------------+----------------------+----------------------------+

和此代码

SELECT  C.ID,C.NAME,C.PARENT_ID ,
            CP.NAME AS PARENTNAME,CP.PARENT_ID AS PARENT_PARENT_ID,
            COALESCE(CG.NAME,CP.NAME) AS GRANDPARENTNAME,
            COALESCE(CG.PARENT_ID,CP.PARENT_ID) AS GRANDPARENT_PARENT_ID,
            COALESCE(CGG.NAME,CG.NAME) AS GREATGRANDPARENTNAME ,
            COALESCE(CGG.PARENT_ID,CG.PARENT_ID) AS GREATGRANDPARENT_PARENT_ID
FROM        CATEGORY C
LEFT JOIN   CATEGORY CP ON CP.ID = C.PARENT_ID
LEFT JOIN   CATEGORY CG ON CG.ID = CP.PARENT_ID
LEFT JOIN   CATEGORY CGG ON CGG.ID = CG.PARENT_ID
ORDER BY C.ID

结果

+------+------+-----------+------------+------------------+-----------------+-----------------------+----------------------+----------------------------+
| ID   | NAME | PARENT_ID | PARENTNAME | PARENT_PARENT_ID | GRANDPARENTNAME | GRANDPARENT_PARENT_ID | GREATGRANDPARENTNAME | GREATGRANDPARENT_PARENT_ID |
+------+------+-----------+------------+------------------+-----------------+-----------------------+----------------------+----------------------------+
|    1 | AAAA |         2 | AAA        |                3 | AA              |                     4 | A                    |                          5 |
|    2 | AAA  |         3 | AA         |                4 | A               |                     5 | A                    |                          5 |
|    3 | AA   |         4 | A          |                5 | A               |                     5 | NULL                 |                       NULL |
|    4 | A    |         5 | NULL       |             NULL | NULL            |                  NULL | NULL                 |                       NULL |
|   10 | BBBB |        11 | BBB        |               12 | BBB             |                    12 | NULL                 |                       NULL |
|   11 | BBB  |        12 | NULL       |             NULL | NULL            |                  NULL | NULL                 |                       NULL |
+------+------+-----------+------------+------------------+-----------------+-----------------------+----------------------+----------------------------+