2013-03-07 184 views
4

查询下面返回NULL如果menu_items.parent不是这是错误的。IF和CASE语句在SELECT查询中带有子查询

我想在这里做的是,如果menu_items.parent行的值是0 然后返回它的原始值,但如果该值不为0 然后返回的相应行的名称(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 

回答

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

'menu_items.name'不同,如果'menu_items.parent'不是'0'所以你只返回同一行,而不是数量 – BentCoder 2013-03-07 12:17:21

+0

的名称现在检查更新的答案。 – 2013-03-07 12:21:20

+0

爆炸:)非常感谢。 – BentCoder 2013-03-07 12:27:39