2015-07-03 70 views
1

我有此查询如何将多列数据合并为一个? [邻接表模型查询]

SELECT t1.categoryid AS lev1, t2.categoryid as lev2, t3.categoryid as lev3, t4.categoryid as lev4 
FROM category AS t1 
LEFT JOIN category AS t2 ON t2.parent = t1.categoryid 
LEFT JOIN category AS t3 ON t3.parent = t2.categoryid 
LEFT JOIN category AS t4 ON t4.parent = t3.categoryid 
WHERE t1.categoryid = 4149418031; 

这是怎么造成像

enter image description here

看起来你可以看到它返回四列。 我想将所有四个不同的数据合并成一列。

我看了类似的问题,但没有一个在他们的查询中留下了联接。 我知道它可以使用union但我挣扎。

谢谢。

+0

你是什么意思不同的数据? categoryid 1,2,3,4的不同组合您可以将原始查询嵌套在另一个查询中,在该查询中,您从(/ *内部查询* /)中选择DISTINCT *。 – user3538411

+0

@ user3538411有四列可能包含重复数据。我想要将所有列中的不同数据合并为一个。我用查询结果更新了问题。看一看。 – Pranav

+0

嗨Pranav。你是否能够解决这个问题。我也面临着将查询从“with”转换为mysql版本的问题。 –

回答

0

正如您所说,您可以在查询结果上使用UNION。在剩下的答案中,我将向您展示一个使用CTE的解决方案,CTE是许多系统中可用的标准SQL语法,但不幸的是,不在MySQL中。但是,要将这个查询转换为MySQL,你可以看看下面的答案:How do you use the "WITH" clause in MySQL?

WITH query AS (
    SELECT t1.categoryid AS lev1, t2.categoryid as lev2, t3.categoryid as lev3, t4.categoryid as lev4 
    FROM category AS t1 
    LEFT JOIN category AS t2 ON t2.parent = t1.categoryid 
    LEFT JOIN category AS t3 ON t3.parent = t2.categoryid 
    LEFT JOIN category AS t4 ON t4.parent = t3.categoryid 
    WHERE t1.categoryid = 4149418031) 
SELECT lev1 AS category_value FROM query 
    UNION 
SELECT lev2 AS category_value FROM query 
    UNION 
SELECT lev3 AS category_value FROM query 
    UNION 
SELECT lev4 AS category_value FROM query; 
+0

感谢您的回答! 虽然我努力转换,但我会考虑它。 再次感谢。 – Pranav