gpt4 book ai didi

mysql - 简单 MySQL 递归上的 Union

转载 作者:行者123 更新时间:2023-11-30 00:27:05 25 4
gpt4 key购买 nike

有没有办法在 LEFT JOIN 行之间进行 UNION,以便结果不在单独的列(lev1、lev2、lev3 和 lev4)中,而是在单个列中(即“ItemNo”)?

这是 MySQL 查询:

SELECT t1.ItemID AS lev1, t2.ItemID as lev2, t3.ItemID as lev3, t4.ItemID as lev4
FROM TableOfRelations AS t1
LEFT JOIN TableOfRelations AS t2 ON t2.ParentItemID = t1.ItemID
LEFT JOIN TableOfRelations AS t3 ON t3.ParentItemID = t2.ItemID
LEFT JOIN TableOfRelations AS t4 ON t4.ParentItemID = t3.ItemID
WHERE t1.ParentItemID = (SELECT ID FROM TableOfItems WHERE ItemID = 3599);

编辑:这是我正在寻找的结果示例:

ItemID   ParentItemID   JoinedDescription1      JoinedDescription2
3599 NULL MyString1A MyString1B
35 3599 MyString35A MyString35B
168 3599 MyString168A MyString168B
192 168 MyString192A MyString192B
238 3599 MyString238A MyString238B
266 168 MyString266A MyString266B

此结果将用于使用 VB.NET 填充 TreeView。此外,“JoinedDescriptions”尚未根据 ItemID 从不同的表中连接,但我认为一旦正确获得基本表,我就可以轻松处理该问题。重要提示:这些选定的行仅属于一个项目(本例中的根项目“3599”),这意味着它只是数千行中的几行。一些递归示例假定所有表行都在查询中使用,这不是我的情况。

最佳答案

不,实际上没有办法在 LEFT JOIN 操作之间进行 UNION。

但是,您可以通过将查询转换为内联 View ,使用查询的结果集来获取所需的结果。

这是一种方法:

SELECT u.i AS lev
, CASE u.i
WHEN 1 THEN t.lev1
WHEN 2 THEN t.lev2
WHEN 3 THEN t.lev3
WHEN 4 THEN t.lev4
END AS levItemID
FROM ( SELECT 1 AS i
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
) u
CROSS
JOIN ( SELECT t1.ItemID AS lev1
, t2.ItemID AS lev2
, t3.ItemID AS lev3
, t4.ItemID AS lev4
FROM TableOfItems t0
JOIN TableOfRelations t1
ON t1.ParentItemID = t0.id
LEFT
JOIN TableOfRelations t2
ON t2.ParentItemID = t1.ItemID
LEFT
JOIN TableOfRelations t3
ON t3.ParentItemID = t2.ItemID
LEFT
JOIN TableOfRelations t4
ON t4.ParentItemID = t3.ItemID
WHERE t0.ItemID = 3599
) t

注意:这实际上更像是一个 UNION ALL 操作,它不会删除重复项,它返回 NULL 值,并且返回父级的级别。

您可以调整查询以获得您想要的结果。如果您不关心级别编号,请从 SELECT 列表中删除 u.i

要删除重复项,您可以在 SELECT 后面添加 DISTINCT 关键字,或添加 GROUP BY 子句。要消除 NULL 值,您可以添加 HAVING levItemID IS NOT NULL 子句等。

关于mysql - 简单 MySQL 递归上的 Union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22789099/

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