当前位置: 首页 > 面试题库 >

SQL嵌套顺序由?

解河
2023-03-14
问题内容

我敢肯定这已经被问过了,但是我不知道确切地称呼它是什么来找到答案。

我有一个类别和子类别的表格。他们每个人都有一个ID和一个父母ID。如果是顶级类别,则父ID为0。子类别的父ID设置为其父ID。

category_id          # The ID for this record
category_name        # The name of the category
parent_id            # The parent ID for this category
display_order        # Order of categories within their grouping

1 A  0 0     # First primary category
2 a1 1 0     # Subcategory, parent is A, display_order is 0
3 a2 1 1
4 a3 1 2

5 B  0 1     # Second primary category
6 b1 5 0     # Subcategory, parent is B, display_order is 0
7 b2 5 1
8 b3 5 2

我正在尝试编写一个SQL查询,该查询将按此顺序提供所有类别:

A,a1,a2,a3,B,b1,b2,b3

SELECT * FROM categories ORDER BY display_order

这在SQL中是可能的,还是我需要使用多个查询

谢谢布拉德


问题答案:

这样的事情可能会起作用:

SELECT *
FROM categories
ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order

但由于它不能使用索引,因此速度会很慢。(虽然没有测试,可能是错误的)

第一个ORDER BY条件将父母和孩子分类在一起。然后第二个确保父母先于子女;第三类对孩子们进行分类。

而且,它显然仅在您直接描述的情况下才有效,在这种情况下,您具有两级层次结构。



 类似资料:
  • 问题内容: 表格1: 表2: 我只需要在值TABLE1。“ SALE_SUM_PIECES”小于TABLE2中“ PIECES”的总和时减去on的值。例如:的值就是。现在,我需要检查SUM的值在哪一行。在下面的示例中,TABLE2中的第一行无效,因为7大于6。但是TABLE2中的第二行是有效的,因为row1中“块”的总和并且TABLE2中的row2即6 + 10 = 16大于7。因此,我需要从第二

  • 问题内容: 我正在尝试在Elasticsearch中进行嵌套排序,但到目前为止没有成功。 我的数据结构: 我想根据文档中第一作者的姓氏对文档进行排序。 使用的映射: 使用SearchRequestBuilder(JAVA)进行排序: 这行得通,但没有给出想要的结果(例如,首先是“叫卖”,然后是“罗杰”)。 我错过了什么吗?有没有办法表明Elasticsearch访问数组authorList的ind

  • 我试图在Elasticsearch中进行嵌套排序,但到目前为止还没有成功。 我的数据结构: 我想根据文档中第一作者的姓氏对文档进行排序。 使用SearchRequestBuilder(JAVA)进行排序: 这是有效的,但不能给出想要的结果(例如,首先是“霍金”,然后是“罗杰”)。 我是不是漏掉了什么?是否有一种方法可以指示Elasticsearch访问数组authorlist的index=0?是否

  • 我想将嵌套字典中包含的某些数据导出到PD数据框,然后导出到Excel: 我希望有一个数据框,其中列顺序为case、wind、speed、ti、变量列表[0],变量列表[1] 我得到:情况,风,速度,list_of_variables[1],list_of_variables[0], ti 有没有办法指定嵌套字典的顺序或重新排列数据帧? 谢谢

  • 问题内容: 我有一个数据库,并且使用查询来生成一个中间表,如下所示: 我想为a <avg(a)的用户计算b的标准偏差 我以这种方式计算avg(a),并且效果很好: 但是查询: 返回一个错误,更准确地说,我被告知无法识别avg中的“ a”(选择a from …)。这使我感到非常困惑,因为它可以在上一个查询中使用。 如果有人可以帮助我,我将不胜感激。 编辑: 我将查询结果存储到临时表中以生成中间表,但

  • 我有3个表作为学生数据,包括学生的数据,科目表的数据提供的所有科目和分数,学生获得的每一个科目的分数。通过StudentId标记到StudentData表的表映射,通过SubjectId标记到Subjects表的表映射 我想做的是选择每个科目的最高分数和学生的名字,如下所示 所以我写了一个甲骨文PL / SQL查询如下, 但它只给出了一个结果。请帮助我开发一个查询来获取我的预期结果集。