2016-09-12 17 views
0

以内に、私は次のMySQLのクエリを使用している場合:greatgrandparentがNULLの場合MySQLはSELECT

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 

は、私はそれが代わりにgrandparent値を表示したいです。これは可能ですか?

私はCASE WHENを試しましたが、エラーをスローし続けるので、どこかで構文が間違っている必要があります。

+0

なぜあなたはISNULL(greatgrandparent_id、grandparent_id)をしないのですか? –

答えて

0

簡易解:IFNULL(greatgrandparent, grandparent)

0

にはという句がありません。グループはという句ではありません。

0

このコードが役立つ場合があります。

SELECT ID、名前、PID AS PARENT_ID、祖父母が他 その後、 (ID = grandparent_idはWHEREカテゴリからPARENT_IDを選択)NULLではありません ケース(カテゴリからPARENT_IDを選択WHERE ID = PID)_parent_idとして
終了、その後、祖父母がNULLではありません 場合 (カテゴリID = grandparent_idから名前を選択)、他 アクティブ= '1'
ORDER BYカテゴリから_parent_name AS エンド(カテゴリWHERE ID = PIDから名前を選択) grandparent_id、parent_id、 sort、id ASC

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 

結果3210

+------+------+-----------+------------+------------------+-----------------+-----------------------+----------------------+----------------------------+ 
| 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 | 
+------+------+-----------+------------+------------------+-----------------+-----------------------+----------------------+----------------------------+