gpt4 book ai didi

php - 选择子类别和没有子类别的父类别

转载 作者:行者123 更新时间:2023-11-29 07:15:32 25 4
gpt4 key购买 nike

这是我数据库中的表结构:

enter image description here

现在我想选择以下类别:

  • 子类别(parent_category_id 不为 NULL 的类别)
  • 没有子类别的类别(parent_category_id 为 NULL,且没有其他类别的parent_category_id 等于此类别)

我尝试过这个查询:

SELECT * 
FROM category
WHERE parent_category_id IS NOT NULL
OR (id NOT IN (SELECT id FROM category WHERE parent_category_id IS NOT NULL) AND parent_category_id IS NULL)

在我的数据库中,我有以下记录:

enter image description here

但是当我执行查询时,他返回所有记录。而且我不想要B类头条记录。因为它是一个带有子类别的父类别。

我想要取回以下记录:

  • A 类
  • B 类 - child

我该怎么做?

最佳答案

从性能角度来看,您可以尝试以下几种方法,或者以防万一您更喜欢不同的代码结构

使用 EXISTS 代替 IN ( http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html )

SELECT * 
FROM category c
WHERE parent_category_id IS NOT NULL
OR
(
parent_category_id IS NULL
AND NOT EXISTS (SELECT * FROM category pc WHERE pc.parent_category_id = c.id)
)

或者使用连接

SELECT DISTINCT c.*
FROM category c
LEFT JOIN category pc
ON c.id = pc.parent_category_id
WHERE
c.parent_category_id IS NOT NULL
OR (c.parent_category_id IS NULL
AND pc.parent_category_id IS NULL)

Exists 和 Joins 通常被认为在性能上更有效,但这可能不仅仅是测试并看看您喜欢什么。

关于php - 选择子类别和没有子类别的父类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38081681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com