본문 바로가기
MySql

MySQL 하위 쿼리가있는 SELECT 쿼리의 IF 및 CASE 문

by 베이스 공부 2021. 1. 9.
반응형

menu_items.parent 0 이 아닌 경우 아래 쿼리는 NULL을 반환하며 이는 잘못된 것입니다.

여기서 제가하려는 것은 menu_items.parent 행의 값이 0 이면 원래 값으로 반환하지만 값이 0 <이 아닌 경우입니다. / strong> 그런 다음 값이 무엇이든 해당 행의 이름 (varchar)을 반환합니다.

내가 NULL을 계속 얻는 이유를 아십니까?

참고 : 선택한 다른 모든 열은 정상적으로 제공되므로 쿼리 자체는 정상입니다.

감사

예 1 :

SELECT
...
...
(
   CASE
      WHEN menu_items.parent = '0' THEN menu_items.parent
      ELSE (SELECT name FROM menu_items WHERE id = menu_items.parent)
   END
) AS ParentID
...
...
FROM menus
INNER JOIN menu_items ...
...
...

예 2 :

SELECT
...
...
IF
(
   menu_items.parent = '0',
      menu_items.parent,
      (SELECT name FROM menu_items WHERE id = menu_items.parent)
) ParentID
...
...
FROM menus
INNER JOIN menu_items ...
...
...

실제 검색어 :

SELECT
menus.name AS MenuName,
menu_items.id AS MenuItemsId,
menu_items.name AS MenuItemsName

/*
Sub section should go here
*/


FROM users
INNER JOIN assigned_menus ON assigned_menus.fk_users_id = users.id
INNER JOIN menu_items ON menu_items.id = assigned_menus.fk_menu_items_id
INNER JOIN menus ON menus.id = menu_items.fk_menus_id
WHERE
users.id = ? AND
users.is_active = 'YES' AND
menu_items.is_active = 'YES' AND
menus.is_active = 'YES'
ORDER BY
MenuName,
MenuItemsName

menu_items 표

ID      name                    parent       fk_menu_items_id
1   Menus           0       1
2   Roles           0       1
3   Permissions     0       1
4   Users           0       1
5   Files           0       1
6   File Uploads        0       1
7   University      6       1
8   Details         6       1
9   Progress        6       1
10  Assg            6       1
11  Applications        0       2
12  New             11      2
13  Edit            11      2
14  Rejected        11      2
15  Approved        11      2
16  Exs         0       2
17  Assm            16      2
18  Stf         0       3
19  Std         0       3
20  Prg         19      3
21  Comm            0       4
22  Sms         21      4
23  Sms2            21      4
24  New2            0       4
25  Act         0       4

 

해결 방법

 

 SELECT
...
...
(
   CASE
      WHEN menu_items.parent = '0' THEN menu_items.parent
      ELSE (SELECT mi.name FROM menu_items mi WHERE mi.id = menu_items.parent)
   END
) AS ParentID
...
...
FROM menus
INNER JOIN menu_items ...
...
...

 

참조 페이지 https://stackoverflow.com/questions/15270942

 

 

반응형

댓글