2013-07-29 77 views
0

我有一个表,如下自联接独特的结果集的问题 - MySQL的

ID | CID 

1 | 3 
2 | 0 
3 | 4 
4 | 0 
5 | 0 
6 | 3 

下面是SQL查询我使用的是自联接。

SELECT t1.ID 
FROM `tbl_a` AS t1 JOIN `tbl_a` AS t2 
ON t1.ID = t2.CID 

这给了我如下的O/P。

ID | CID 

3 | 4 
4 | 0 

但我想作为输入/输出的是1,3,4,6

O/P的逻辑是正在使用的行ID或CID。如果我解释更多当ID是1 CID 3时,当ID是3时CID是4,当ID是6时CID是3.当我得到唯一ID时表中使用的CID将是1,3,4,6

最终正确的O/P要求如下。

ID 

1 
3 
4 
6 

我该怎么做?

+1

不应该t1.Id = t2.CID?另外,您的预期产出是{1,3}和{4,6}?请格式化,以便更清楚 –

+0

您只从t1中选择列。尝试'选择*从t1加入B t2 t2 t1.ID = t2.ID;' –

+0

正如目前所述,您的示例输出是错误的,您的问题没有意义。 –

回答

1

不知道你在做什么。我想你说的是你需要具有非零CID或由CID列引用的行的ID。 (?)试试这个:

SELECT ID FROM tbl_a AS t1 WHERE CID <> 0 OR EXISTS(SELECT * FROM tbl_a AS t2 WHERE t2.CID = t1.ID) ORDER BY ID 
1

试试这个

SELECT t2.ID 
FROM `tbl_a` AS t1 JOIN `tbl_a` AS t2 
ON t1.ID = t2.CID 
OR t2.ID = t1.CID 
GROUP BY t2.ID 
1

我想这可能是你想要什么:

select ID 
from tbl_a 
where id in (3, 4) or cid in (3, 4);