自我加入MySQL

Sankalp

我一直在尝试从同一表中获取记录,具体取决于child和parent的parent_id概念。额外的一列是定义排序顺序的序列。

我的资料是

Sr.No | Name         | parent_id       | Sequence
1.    | Customer     | 0               | 0
2.    | orders       | 0               | 5
3.    | General      | 0               | 10
4.    | All          | 1               | 0
5.    | Purchased    | 1               | 5
6.    | Non-Purch    | 1               | 10
7.    | Pending      | 2               | 0
8.    | Change Pass  | 3               | 0
9.    | Logout       | 3               | 5

我想在一次执行中提取数据虽然我不能使用外部连接,因为它不受mysql支持。

我尝试过的SQL是..

SELECT b.* FROM soi_admin_menu a RIGHT JOIN soi_admin_menu b ON a.menu_id = b.parent_id WHERE 1=1 AND a.parent_id = 0 ORDER BY a.sequence, b.parent_id ASC

我想要按顺序排列这样的数据。

  --Customer
  --All
  --Purchased
  --Non-Purchased
  --Orders
  --Pending
  --General
  --Change Password
  --Logout

与所有领域。我的数据库是MySQL

巴托斯·马克辛科夫斯基(Bartosz Marcinkowski)

没有外部联接,联合或其他假设,您将无法做到这一点。

如果可以假设Sequence和Sr.No对parent_id = 0的行给出相同的顺序,则可以尝试执行以下操作:

SELECT soi_admin_menu.*, 
    CASE 
        WHEN parent_id=0 THEN Sr.No * 10000 
        ELSE parent_id * 10000 + 1 + Sequence
    END as my_order 
FROM soi_admin_menu 
ORDER BY my_order;

请注意,此解决方案为您提供了对Sequence,id和parent的限制(在这种情况下为10000)。要摆脱此限制,请使用字符串连接,并在根行的情况下按字符串时间列(其哈希值小于任何字符)进行排序。

没有外部联接,工会或其他假设,就无法说出哪个

6.    | Non-Purch    | 1               | 10
7.    | Pending      | 2               | 0

首先。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章