gpt4 book ai didi

mysql - 如何根据另一列中的值从一列中选择唯一值?

转载 作者:行者123 更新时间:2023-11-29 19:30:10 26 4
gpt4 key购买 nike

该表的结构是,child_id 列中的值可以重复,每个重复项都有不同的关联 parent_id。假设 child_id 1 有四个父级,那么它在 child_id 列中将拥有 3 个自身副本,但每个副本都与每个父级相关联。 3 个不同的 parent_id

考虑到这些条件,我想要实现的是按 parent_id 排序,并通过根据最后一个或最近的父级仅选择一个来删除不需要的 child_id 重复项(父级的级别将为子级的-1)。这可能吗?

我尝试在 sqlfiddle 上创建一个 fiddle ,但我不断收到创建脚本错误,所以我想我只需将代码粘贴到此处:

CREATE TABLE `parent_child_columns` (`id` int auto_increment,
`child_id` int,
`parent_id` int,
`level` int,
PRIMARY KEY (`id`))

INSERT INTO `parent_child_columns` (`child_id`, `parent_id`, `level`)
VALUES (1, 0, 1), (2, 0, 1),
(3, 1, 2), (4, 1, 2),
(5, 3, 3), (5, 1, 3), (6, 3, 3), (6, 1, 3)



SELECT pc.child_id, pc.level
FROM parent_child_columns pc
ORDER BY pc.parent_id

使用此查询,重复项仍然会被拾取,因此一列已经显示在另一列之前,而该列应该位于另一列之后(因为按 ASC 排序时,其 1 级父级位于顶部)。 (父列可以有许多子列。)如有必要,我可以在数据库中包含实际数据的屏幕截图。

我正在此处构建一个动态表头,您可以在其中添加无限数量的嵌套列。关于如何排列行和列还有更多内容,因此如果我的解释仍然有点模糊并且您无法获得清晰的图片,请告诉我。但我所做的概要基本上是我尝试逐行构建并根据其上方父列的顺序排列每个子级别(或行)中的列。

我得到了什么: enter image description here enter image description here

预期输出是,在实际表中,1843 应位于 1842 之下,如数据库中所示,其父级为 1839 并且1842。我只是假设它已经在 1841 之下,因为它被提早拾取,但也许实际情况并非如此?关于可能导致这种情况的原因有更好的想法吗?

附注在上面的示例中,我尝试拆分 1841,因此它下面应该有 2 个新列。

最佳答案

如果您希望父级的子级级别为“-1”,请使用join:

SELECT pc.*, pcp.id
FROM parent_child_columns pc LEFT JOIN
parent_child_columns pcp
ON pc.parent_id = pcp.child_id AND pcp.level = pc.level - 1
ORDER BY pc.parent_id;

关于mysql - 如何根据另一列中的值从一列中选择唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41841558/

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