繁体   English   中英

如何清除右联接中的空值

[英]How to get rid of null values in right join

我有三张桌子

分类

id
name

子类别

id
name
category_id

子类别_三

id
name
sub_categories

现在,我想在下拉列表中显示这些表中的所有数据(名称),要执行的查询以及如何使用foreach或mysqli_fetch_assoc()在视图(嵌套循环)上设置它们。

我正在使用此查询

$query="SELECT a.c_name, a.id, b.sc_name, b.id, c.sct_name, c.id 
FROM categories a 
right JOIN sub_categories b ON a.id=b.id 
right JOIN sub_categories_three c ON b.id=c.id";

但是此查询返回的空值也填充了我的下拉标记中不必要的空间。

这是显示我不想要的null值的图像:

图片

因此,所有您不需要第一张桌子。 您可以将它们聚在一起! 这导致以下模式:

create table category
(
    id       int primary key,
    name     varchar(255) not null,
    superior int
);

到现在为止还挺好。 现在我们需要一些伪数据。 为此,执行以下语句:

insert into category (id, name, superior)
values (1, 'Category 1', null),
       (2, 'Category 2', 1),
       (3, 'Category 3', 1),
       (4, 'Category 4', 1),
       (5, 'Category 5', 1),
       (6, 'Category 6', 2),
       (7, 'Category 7', 2),
       (8, 'Category 8', 2),
       (9, 'Category 9', 2),
       (10, 'Category 10', 3),
       (11, 'Category 11', 3),
       (12, 'Category 12', 3),
       (13, 'Category 13', 3),
       (14, 'Category 14', 4),
       (15, 'Category 15', 4),
       (16, 'Category 16', 7),
       (17, 'Category 17', 7),
       (18, 'Category 18', 8),
       (19, 'Category 19', 8),
       (20, 'Category 20', 8);

现在,您需要做的就是递归SQL语句。 在这种情况下,我需要类别7及其所有子类别:

with recursive subcategory as (
    select id, name, superior
    from category
    where id = 7
    union
    select c.id, c.name, c.superior
    from category c
             inner join subcategory s on s.id = c.superior
)
select *
from subcategory;

结果为(CSV格式):

id, | name,        | superior
---------------------------
7,  | Category 7,  | 2
16, | Category 16, | 7
17, | Category 17, | 7

我想就是这样解决您的问题的。

本文也可能对您有帮助。

干杯,敬请期待!

西莱姆

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM