如何消除MySQL中列之间的排列

时间:2011-10-13 13:42:53

标签: mysql sql database

我有表列一(idprocess)指向第二列(idporcess1)并指向列树(idprocess2)。

id    idprocess        idporcess1    idprocess2
1      15                  16          17                  <==  A
2      15                  16          19                  <==  B
3      15                  20          23
4      14                  16          17
6      16                  15          80                  <== C
7      17                  15           49                 <== D
8      23                  16           20                 <== E    

我需要一个返回此命令的SQL查询:行c和行D,所以使用数字idprocess(16)和idprocess(17)

因为行c:idprocess(16)再次引用ipdprocess1(15) 因为行c:idprocess(17)引用了agin ipdprocess1(15)

请帮忙  我只想在树上发出圆形参考

2 个答案:

答案 0 :(得分:1)

如果您乐意找到排在前两列的行,这将完成这项工作:

SELECT *
  FROM my_tbl t
 WHERE EXISTS (SELECT 1 FROM my_tbl t1 WHERE t1.idprocess = t.idprocess1 AND t1.idprocess1 = t.idprocess)
 ORDER BY t.id;

替代解释:
如果您希望之前idprocess1中列出idprocess的所有行(在=较小的ID之前),那么您可以:

SELECT *
  FROM my_tbl t
 WHERE EXISTS (SELECT 1 FROM my_tbl t1 WHERE t1.id < t.id AND t1.idprocess = t.idprocess1)
 ORDER BY t.id;

但你不会称之为“排列”。

答案 1 :(得分:0)

这个问题有点模棱两可,但我试图自己理解它,并准备了以下查询:

SELECT * 
FROM TEMP
where C2 IN ( Select C2 FROM TEMP group by C2 having count(C2) > 1 )
OR C3 IN ( Select C3 FROM TEMP group by C3 having count(C3) > 1 )