mysql if查询_mysql – SELECT查询中的IF和CASE语句,其中包含子查询

如果menu_items.parent不为0,则下面的查询返回NULL,这是错误的.

我在这里要做的是,如果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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值