首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匹配cat_subcat并包含空值的cat_ID的类别表

匹配cat_subcat并包含空值的cat_ID的类别表
EN

Stack Overflow用户
提问于 2019-02-19 16:01:40
回答 4查看 34关注 0票数 2

cat_ID _ cat_Name _ Cat_SubCat

1架摄像机. 17

2/ intercoms 2- 17

电视3电视20

厨房用具.19

5名发言者

智能恒温器

7/ smart网点

8台自动割草机

智能手机9/ 21

11 / smart疫苗

12支智能手表

智能锁. 17

智能门铃. 17

15 \x{e 010}智能灯开关

17 \x{e76f}安全/户外活动

18盏灯和信号灯

19 %家庭零

20娱乐/零

21 %可穿戴设备/空

因此,我有一个名为cat_ID;cat_Name和cat_SubCat列的表,它的列名为: cat_Name;和cat_SubCat;我尝试获取所有带有null (标题)的类别行,以打印其他行和相关的cat_ID (标题下的子类别)。

cat_ID _ cat_Name _ Cat_SubCat

17 /安全/户外活动-空壳

1架摄像机. 17

2/ Intercoms 2- 17

9名机器人草坪磨坊

13 /智能锁

14灵巧门铃

18型灯和灯-空灯

7.智能分店

15 \x{e76f}智能开关

19

厨房用具. 19

智能恒温器

11 /智能疫苗

20娱乐娱乐零

3电视. 20

5名发言者

21 /Wearable\ Null

10电话智能电话21

12 -智能手表- 21

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-02-19 17:04:33

试着这样做

SQL Fiddle

MySQL 5.6架构设置

代码语言:javascript
运行
复制
CREATE TABLE Table1
    (`cat_ID` int, `cat_Name` varchar(20), `Cat_SubCat` varchar(4))
;

INSERT INTO Table1
    (`cat_ID`, `cat_Name`, `Cat_SubCat`)
VALUES
    (1, 'cameras', '17'),
    (2, 'intercoms', '17'),
    (3, 'televisions', '20'),
    (4, 'kitchen appliances', '19'),
    (5, 'speakers', '20'),
    (6, 'smart thermostat', '19'),
    (7, 'smart outlets', '18'),
    (8, 'robotic lawn mowers', '17'),
    (9, 'smartphones', '21'),
    (11, 'smart vaccums', '19'),
    (12, 'smartwatches', '21'),
    (13, 'smart locks', '17'),
    (14, 'smart doorbell', '17'),
    (15, 'smart light switches', '18'),
    (17, 'Security/Outdoors', NULL),
    (18, 'Lamps & Lights', NULL),
    (19, 'Household', NULL),
    (20, 'Entertainment', NULL),
    (21, 'Wearables', NULL)
;

查询1

代码语言:javascript
运行
复制
select 
  t2.cat_ID,
  t2.cat_Name,
  t2.Cat_SubCat
from table1 t2
left join table1 t1
  on t2.Cat_SubCat = t1.cat_id
where t1.Cat_Subcat is null
order by Coalesce(t2.cat_subcat, t2.cat_Id-0.01)

结果

代码语言:javascript
运行
复制
| cat_ID |             cat_Name | Cat_SubCat |
|--------|----------------------|------------|
|     17 |    Security/Outdoors |     (null) |
|      1 |              cameras |         17 |
|     13 |          smart locks |         17 |
|     14 |       smart doorbell |         17 |
|      8 |  robotic lawn mowers |         17 |
|      2 |            intercoms |         17 |
|     18 |       Lamps & Lights |     (null) |
|     15 | smart light switches |         18 |
|      7 |        smart outlets |         18 |
|     19 |            Household |     (null) |
|     11 |        smart vaccums |         19 |
|      6 |     smart thermostat |         19 |
|      4 |   kitchen appliances |         19 |
|     20 |        Entertainment |     (null) |
|      5 |             speakers |         20 |
|      3 |          televisions |         20 |
|     21 |            Wearables |     (null) |
|      9 |          smartphones |         21 |
|     12 |         smartwatches |         21 |
票数 0
EN

Stack Overflow用户

发布于 2019-02-19 16:50:41

如果我正确理解了这个问题,你想:

  • 获取为空的值
  • 获取空值的ID,如果这些想法是子类别,也可以获取这些类别。

利用子查询,这将实现您的目标。我们首先获取为null的所有is,然后检查最后获取所有值,如果这些null is是子类别,或者子类别是空的。

代码语言:javascript
运行
复制
  SELECT 
    *
  FROM
    Category,
    (
      SELECT cat_ID,
      FROM Category
      WHERE Cat_SubCat is NULL
    ) tempTbl

  WHERE
    (Cat_SubCat is NULL)
    OR
    (tempTbl.cat_ID = Cat_SubCat)
票数 1
EN

Stack Overflow用户

发布于 2019-02-19 16:52:51

因为您的层次结构只有一个深度,所以您可以这样做:

代码语言:javascript
运行
复制
ORDER BY COALESCE(cat_id, cat_subcat) ASC 

在您现有的SQL上。

如果您的层次结构是多个深度,那么您将需要执行一个递归的CTE来在一个新的列中建立顺序并根据它进行排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54770382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档